기록

Docker Compose로 MySQL 개발 환경 구성하기 + 초기 설정 자동화 본문

DevOps

Docker Compose로 MySQL 개발 환경 구성하기 + 초기 설정 자동화

zyin 2025. 4. 14. 12:00

시작하면서

로컬 개발 환경을 매번 수동으로 셋업하는 건 꽤 귀찮다. 특히 DB 사용자나 초기 데이터베이스 권한을 설정할 일이 반복되면 더 그렇다. 이럴 때 Docker Compose를 활용하면, 한 번의 설정으로 MySQL을 포함한 전체 환경을 자동으로 구성할 수 있다.

이번 포스팅에서는 MySQL 컨테이너를 띄우면서 사용자 생성, 권한 부여, DB 초기 설정까지 자동화하는 방법을 정리한다.


1. 디렉토리 구조

my-dev-env/
├── docker-compose.yml
└── init.sql
  • docker-compose.yml: MySQL, Redis 등을 정의하는 파일
  • init.sql: 컨테이너 초기 실행 시 실행될 SQL 스크립트

2. docker-compose.yml 설정

version: '3.8'

services:
  movie_mysql:
    image: mysql:8.0
    container_name: movie_mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
    ports:
      - "3306:3306"
    volumes:
      - movie_mysql_data:/var/lib/mysql
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro  # 초기화 스크립트

  movie_redis:
    image: redis:7.0
    container_name: movie_redis
    restart: always
    ports:
      - "6379:6379"
    command: redis-server --appendonly yes
    volumes:
      - movie_redis_data:/data

volumes:
  movie_mysql_data:
  movie_redis_data:

networks:
  default:
    name: movie_network
  • ./init.sql:/docker-entrypoint-initdb.d/init.sql: MySQL 공식 이미지의 초기화 디렉토리에 마운트하면, 컨테이너가 처음 실행될 때 이 스크립트가 자동 실행된다.
  • :ro는 읽기 전용 마운트

3. init.sql – 사용자 및 권한 설정

CREATE DATABASE IF NOT EXISTS movie_db;

CREATE USER 'movie_user'@'%' IDENTIFIED BY 'movie_password';

GRANT ALL PRIVILEGES ON movie_db.* TO 'movie_user'@'%';

FLUSH PRIVILEGES;

컨테이너가 처음 생성될 때 위 SQL이 실행되어 아래 작업이 자동으로 수행된다:

  • movie_db라는 DB 생성
  • movie_user라는 유저 생성
  • 해당 유저에게 전체 권한 부여

4. init.sql이 적용되지 않는 경우?

MySQL 공식 이미지의 특징은 데이터 디렉토리가 비어 있을 때만 /docker-entrypoint-initdb.d/*.sql을 실행한다는 점이다. 한 번이라도 컨테이너가 실행된 상태라면 이후에는 init.sql이 적용되지 않는다.

초기화를 다시 하려면 아래 명령어로 컨테이너와 볼륨을 삭제하고 다시 실행하면 된다:

docker-compose down -v
docker-compose up -d

5. 권한 확인하기

컨테이너에 접속해서 init.sql이 제대로 실행됐는지 직접 확인할 수 있다.

docker exec -it movie_mysql mysql -u root -p
# 비밀번호: rootpassword

데이터베이스 존재 확인

SHOW DATABASES;

사용자 확인

SELECT user, host FROM mysql.user WHERE user = 'movie_user';

권한 확인

SHOW GRANTS FOR 'movie_user'@'%';

실제 로그인 테스트 (선택)

mysql -h 127.0.0.1 -P 3306 -u movie_user -p
# 비밀번호: movie_password

마무리

이렇게 하면 도커를 활용해서 로컬 개발 환경을 간편하게 구성하고, 사용자 및 권한 설정도 자동화할 수 있다. 덕분에 DB 초기 세팅으로 시간을 낭비하지 않아도 되고, 팀원 간 환경 공유도 훨씬 쉬워진다.

 

 
Comments