Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- api gateway 설계
- api gateway 필터
- ApplicationEvent
- argocd
- assertThat
- async/await
- AVG
- AWS
- aws autoscaling
- aws eks
- aws iam role
- AWS KMS
Archives
- Today
- Total
기록
Docker Compose로 MySQL 개발 환경 구성하기 + 초기 설정 자동화 본문
시작하면서
로컬 개발 환경을 매번 수동으로 셋업하는 건 꽤 귀찮다. 특히 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 초기 세팅으로 시간을 낭비하지 않아도 되고, 팀원 간 환경 공유도 훨씬 쉬워진다.
'DevOps' 카테고리의 다른 글
K3s 기반 멀티 노드 클러스터 구축기 (3) - kube-ops-view로 노드/파드 상태 시각화하기 (0) | 2025.04.15 |
---|---|
K3s 기반 멀티 노드 클러스터 구축기 (2) - dev 계정에서 워커 노드 연결하기 (0) | 2025.04.14 |
K3s 기반 멀티 노드 클러스터 구축기 (1) - 컨트롤 플레인 자동화와 Helm 설치까지 (0) | 2025.04.14 |
K3s 기반 멀티 계정 클라우드 인프라 설계 (AWS Free Tier 최적화) (0) | 2025.04.14 |
Gradle test 먼저 실행했더니 실패한 이유: JDK와 javac의 함정 (0) | 2025.04.11 |
Comments