Docker compose로 MySQL 실행하기

긴가민가·2022년 12월 30일
4

Docker 사용기

목록 보기
1/2
post-thumbnail

💡 v20.10.21 Docker를 사용했어요 :)

🏃TL;DR

  1. docker-compose.yml 작성
  2. .env 작성
  3. 도커 컨테이너 실행
  4. 서비스 확인

docker-compose로 MySQL 컨테이너를 만들어 사용하는 방법을 기술합니다.

환경 구성

docker-compose.yml

빈 프로젝트에 docker-compose.yml 파일을 생성하고 아래와 같이 작성합니다.

version: "3.8"

services:
  mysql: # container name
    image: mysql:8.0.31
    ports: # 바인딩할 포트:내부 포트
      - ${MYSQL_BINDING_PORT}:${MYSQL_PORT}
    volumes: # 마운트할 볼륨 설정
      - ${MYSQL_DATA_PATH}:/var/lib/mysql
      - ${MYSQL_CUSTOM_CONFIG_PATH}:/etc/mysql/conf.d
      - ${MYSQL_DEFAULT_CONFIG_FILE}:/etc/my.cnf
    environment: # MySQL의 환경변수
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - TZ=${TZ}
    restart: always

${변수} 부분은 환경 변수입니다.
필자는 (노출되면 안 되는) 중요 정보들 또는 자주 바뀌는 정보는 환경변수로 관리합니다.

MySQL에서 제공하는 환경변수

  • MYSQL_ROOT_PASSWORD : root 비밀번호
  • TZ : 타임존

💡 추가적인 MySQL 환경변수는 Docker MySQL에서 Environment Variables를 확인해요 :)

그 외 (필자가 만든)환경변수

  • MYSQL_DATA_PATH : data 관련 정보를 mount할 로컬 경로
  • MYSQL_CUSTOM_CONFIG_PATH : 추가적인 설정 정보(conf.d/)를 mount할 로컬 경로
  • MYSQL_DEFAULT_CONFIG_FILE : 기본 설정 파일(my.cnf)을 mount할 경로와 파일명
  • MYSQL_BINDING_PORT : MySQL 포트에 바인딩할 포트
  • MYSQL_PORT : Docker에서 실행되는 MySQL 포

.env

같은 경로에 .env 파일을 생성하고 아래와 같이 작성합니다.

# Docker setting
COMPOSE_PROJECT_NAME=mysql-development

# MySQL setting
MYSQL_ROOT_PASSWORD=1234
TZ=Asia/Seoul

# Docker volume setting
MYSQL_DATA_PATH=C:\_workspace\docker\docker-volume\mysql\data
MYSQL_DEFAULT_CONFIG_FILE=C:\_workspace\docker\docker-volume\mysql\my.cnf
MYSQL_CUSTOM_CONFIG_PATH=C:\_workspace\docker\docker-volume\mysql\conf.d

# etc setting
BINDING_PORT=33060
MYSQL_PORT=3306

Docker에서 제공하는 환경변수

  • COMPOSE_PROJECT_NAME : 컨테이너명을 지정

💡 개인의 설정에 맞게 수정하세요 :)

실행

$ docker compose up -d

엥? my.cnf라는 폴더가 생겼습니다..?

💡 File mount는 안 돼..?⚡
기본적으로 Docker는 폴더를 기준으로 마운트하기 때문에, host에 파일이 없다면 폴더를 만들어요.
그래서 로컬 마운트 경로에 my.cnf 파일을 두고 컨테이너에 overwrite 하는 방식으로 진행해요.

어쩔 수 없이, 미리 my.cnf 내용을 마운트 경로에 넣어줍니다.

💡 my.cnf 내용은 여기에 있어요 :)

로컬 my.cnf를 열어 수정하고, docker container 접속 후 my.cnf 파일이 변경되었는지 확인해봅니다.

# 재시작
$ docker compose up -d

# 컨테이너 접속
$ docker exec -it [container ID] /bin/bash

# my.cnf 변경 확인
$ cat /etc/my.cnf

로컬의 my.cnf 수정

컨테이너의 my.cnf 확인

잘 변경됐습니다.😎

💡 변경 여부 테스트이기에, 잊지말고 다시 되돌리세요 :)

💡 /etc 폴더를 마운트 하는 방법은 어때?
필자의 생각으로는 MySQL과는 관련 없는 파일이 많기 때문에, my.cnf를 overwrite 하는 방식이 더 맞다고 생각했어요 :)

연결 테스트

MySQL workbench나 HeidiSQL 등 client tool이 있다면, 쉽게 연결이 가능합니다.

잘 연결됐습니다.😎

💡 해당 내용들을 필자 GitHub에 올려두었어요. :)


의견은 언제든 댓글로 남겨주세요. 🙂

profile
미래의 내가 참고하려고 모아가는 중 :)

5개의 댓글

comment-user-thumbnail
2023년 1월 4일

우와 넘넘 유익해요 😃

1개의 답글
comment-user-thumbnail
2024년 6월 15일

해도해도 안되길래 etc 경로 통째로 마운트 하려고 했는데 그래도 my.cnf가 안생기더라고요; 파일은 안되는군요... 감사합니다 ㅠ

1개의 답글