💡 v20.10.21 Docker를 사용했어요 :)
docker-compose.yml
작성.env
작성docker-compose
로 MySQL 컨테이너를 만들어 사용하는 방법을 기술합니다.
빈 프로젝트에 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 환경변수는 Docker MySQL에서 Environment Variables를 확인해요 :)
그 외 (필자가 만든)환경변수
같은 경로에 .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에서 제공하는 환경변수
💡 개인의 설정에 맞게 수정하세요 :)
$ 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에 올려두었어요. :)
우와 넘넘 유익해요 😃