[개발환경 구성] Docker로 MySQL 서버 구성

DYKO·2022년 11월 18일
1

개발환경구성

목록 보기
2/3

먼저 Spring Boot 연습을 할 예정이라, 해당 서비스에서 사용할 MySQL 서버를 구축하고자 한다.


1. Docker 설치

https://www.docker.com/products/docker-desktop/

위 경로에 들어가서 본인이 사용하는 OS에 맞춰 설치 파일을 다운로드한다. 나는 맥북 에어 M2칩을 사용하고 있어 'Apple Chip' 을 클릭하여 Docker.dmg 파일을 다운로드 했다.

해당 파일을 클릭하면 위와 같은 창이 뜨고, 도커 이미지를 Applications 디렉토리 아이콘으로 마우스 드래그하여 이동시켜 준다.

설치가 완료된 Docker를 실행시키면, 실행시키겠냐는 모달과 네트워크 등에 대한 접근을 위해 보조프로그램을 설치해야 한다고 뜨는데 모두 진행시켜주면 된다. 이후 라이선스 관련 내용에 Accept 해주면 도커 설치 완료!

혹시 모르니 터미널로 버전을 한 번 더 확인해주자.


2. MySQL 컨테이너 구축

도커 컨테이너를 생성하는 방법은 여러가지가 있는데 일단 두 가지 방법으로 설치를 해봤다.

(1) Docker run 명령어로 생성

먼저, 터미널에서 아래 명령어를 실행하여 MySQL 이미지를 다운로드 받는다. M1이 나올 당시에는 기존 Docker 환경이 인텔 칩 기반 linux/amd64 아키텍처 이미지를 사용했는데, 애플 칩의 경우 ARM64 아키텍처 이미지를 사용하게 되어 옵션으로 --platform linux/amd64 을 넣어줘야 빌드 시 에러가 발생하지 않았다고 한다.
하지만 나는 애플 칩용 도커를 받았으니 그냥 설치해보겠다. 후후 에러 발생하면... 고치면 되징~

docker pull mysql:{version}

따로 버전을 지정하지 않고 최신 버전의 MySQL을 설치했다. 설치가 완료됐으니 이제 MySQL 컨테이너를 실행시켜보자. 아래 명령어를 터미널에 입력한 후, 도커에서 해당 컨테이너가 정상적으로 생성 및 실행되고 있는지 확인한다.

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql_container mysql

===== Options =====

-d : 컨테이너를 일반 프로세스가 아닌 데몬 프로세스로 실행
     detached 모드; 사용자가 터미널을 빠져 나와도 프로세스는 계속 실행되는 상태
-p : 호스트 컴퓨터와 컨테이너 환경의 포트를 매핑 {host port}:{container port}
-e : 환경변수 설정, 해당 옵션을 사용하면 Docker File의 ENV도 overwrite됨
--name : 컨테이너 이름 설정

여기까지 에러 없이 성공!!

(2) docker-compose.yml 설정 및 실행

아래 내용을 가진 docker-compose.yml 생성

version: "3.7" # 파일 규격 버전
services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의 ( 컴포즈에서 컨테이너 : 서비스 )
  db: # 서비스 명
    image: mysql:latest # 사용할 이미지
    restart: always
    command: --lower_case_table_names=1
    container_name: mysql-dev # 컨테이너 이름 설정
    ports:
      - "3307:3306" # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)  <- 컨테이너 내부는 무조건 3306
    environment: # -e 옵션
      - MYSQL_DATABASE=my_dev
      - MYSQL_ROOT_PASSWORD=input_password  # MYSQL 패스워드 설정 옵션
      - TZ=Asia/Seoul

    command: # 명령어 실행
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    volumes:
      - /Users/Shared/data/mysql-dev:/var/lib/mysql # -v 옵션 (다렉토리 마운트 설정)

해당 파일이 존재하는 디렉토리 위치에서 docker-compose up -d 명령어를 실행하면 설정한 환경으로 MySQL 컨테이터가 생성 및 실행된다.

데이터베이스 및 사용자 생성

아래 명령어로 구축한 컨테이너의 mysql에 접속해서 데이터베이스와 앞으로 접속할 사용자를 생성해주자.

docker exec -it {컨테이너명} bash

mysql -u root -p #해당 명령어 실행 시, 패스워드 입력 창이 뜨면 패스워드를 입력해준다.

mysql에 접속을 성공했다면, show databases;쿼리를 실행하여 생성된 데이터베이스가 있는지 확인 후, 필요한 DB가 있으면 CREATE DATABASE {database_name};을 실행하여 생성해준다. 앞 서 my_dev로 생성해뒀기 때문에 이 과정은 생략하고 User만 추가했다. 사용자는 아래 명령어를 실행하여 추가 후 권한까지 부여한다.

CREATE USER {user_id}@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON {database_name}.* TO {user_id}@'%';
FLUSH PRIVILEGES; #권한 적용을 서버에 반영

MySQL 접속 확인

이제 생성한 사용자 명으로 접속해보자. 접속 툴은 dbeaver를 사용했다.

여기서 주의!!!! docker-compose.yml에서 host port를 3307로 맵핑해뒀기 때문에 dbeavor로 접속할 때 localhost:3307로 접속해줘야 한다. 3306으로 접속 시 Connection refuse된다.

이상 없이 접속 성공!
도커로 MySQL 컨테이너 생성하기 정말 간편하다 👍🏻



참고 정보

M1 맥에서 Docker로 MySQL 설치하기
도커로 mysql 띄워보자!
DOCKER - 애플 MAC M1칩 사용 시, Mysql 호환 문제
Docker run reference

profile
엔지니어가 되는 그 날 까지!

0개의 댓글