✅ [실무 가이드] Docker로 MySQL 개발 환경 구축하기 (DataGrip 연동 포함)
📌 1. 왜 Docker로 MySQL을 관리할까?
장점 | 설명 |
---|---|
💥 환경 격리 | 로컬 시스템 오염 없이 독립된 DB 실행 가능 |
♻️ 빠른 재시작 | docker-compose up -d 한 줄로 재시작 |
📦 데이터 보존 | volume 을 통해 데이터 유지 가능 |
📄 초기 데이터 자동 import | 초기 .sql 파일을 컨테이너 실행 시 자동 import 가능 |
🔁 팀 협업 호환 | 설정이 .env 와 .yml 파일로 고정되므로 누구나 같은 환경 구성 가능 |
📁 2. 폴더 및 파일 구조
먼저 아래와 같은 구조로 프로젝트 폴더를 준비하세요:
~/docker-mysql-dev/
├── .env # 환경변수 설정 파일
├── docker-compose.yml # 도커 설정 파일
├── init/ # 초기 실행 SQL 저장 폴더
│ └── dump.sql # ✅ 초기 데이터 dump 파일
init/ 폴더 안의 .sql 파일은 컨테이너 최초 실행 시 자동으로 실행됩니다.
📄 3. .env
파일 설정
.env
MYSQL_VERSION=8.0
MYSQL_DATABASE=mydb
MYSQL_USER=myuser
MYSQL_PASSWORD=mypass
MYSQL_ROOT_PASSWORD=rootpass
MYSQL_PORT=3306
☑️ 보안 및 설정 관리 목적
.env는 비밀번호, 포트, 데이터베이스 이름 등을 외부에서 분리해 관리하기 위한 환경 변수 파일입니다.
.gitignore에 등록하는 것이 좋습니다.
⚙️ 4. docker-compose.yml
작성
docker-compose.yml
version: '3.8'
services:
mysql:
image: mysql:${MYSQL_VERSION}
container_name: local-mysql
platform: linux/arm64 # ✅ ARM Mac (M1~M4) 환경에서 필수
ports:
- "${MYSQL_PORT}:3306"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- mysql-data:/var/lib/mysql
- ./init:/docker-entrypoint-initdb.d
restart: unless-stopped
volumes:
mysql-data:
✔️ 포인트 요약
- ARM Mac 대응:
platform: linux/arm64
- 초기 데이터 실행:
./init:/docker-entrypoint-initdb.d
- 데이터 유지: volumes 사용
위처럼 ./mysql_data 등의 호스트 디렉터리 또는 익명 볼륨이 지정돼 있어야 데이터가 남습니다.
🚀 5. 실행 / 중지 / 재시작 명령어
# 폴더 이동
cd ~/docker-mysql-dev
# Docker 실행 (컨테이너 생성) (최초 또는 재시작)
docker-compose up -d
# 중지 및 컨테이너 제거 (데이터는 유지됨)
docker-compose down
# 중지 + 데이터까지 완전 초기화
# 컨테이너 + 네트워크 + 볼륨 삭제
docker-compose down -v
# 중단 후 즉시 재시작
docker-compose restart
- 컨테이너 실행은 docker-compose.yml 파일에 정의된 설정대로 MySQL 컨테이너를 생성하고 실행합니다.
- 실행 완료 후, .env에서 설정한 database mydb가 생성되고 데이터도 자동으로 들어갑니다.
- volumes: 덕분에 볼륨이 기본적으로 제거되지 않기 때문에 down 해서 컨테이너를 중지 + 제거 해도 데이터는 **유지됩니다.**
- 완전히 새로 시작하고 싶을 땐 -v 옵션 사용
- 재시작 시 컨테이너 실행 명령어는 같은 docker-compose.yml로 다시 실행하면, 이전 데이터가 유지된 상태로 컨테이너가 재생성됩니다 (볼륨이 남아 있다면).
💡 그래서 어떻게 쓰냐면?
- 개발 중엔 자주:
docker-compose down
docker-compose up -d
로 컨테이너를 껐다 켜면서 사용합니다.
데이터는 볼륨으로 유지되므로 걱정할 필요 없음.
🛠 6. 상태 확인 및 로그 보기
docker ps # mysql 컨테이너 확인
docker logs local-mysql # 초기 SQL import 로그 확인
💻 7. DataGrip 연동 설정
항목 | 값 |
---|---|
Host | localhost |
Port | 3306 (또는 .env 에서 지정한 포트) |
User | myuser |
Password | mypass |
Database | mydb |
DataGrip에서 + → MySQL → 위 정보 입력 → 테스트 후 저장
📝 8. SQL 덤프 자동 import 방식
init/
폴더에.sql
파일을 두면 컨테이너 최초 실행 시 자동 실행됩니다.- 파일명은 무엇이든 상관없지만
.sql
확장자여야 함 - 실행 시점: 최초 컨테이너 생성 시 1회만 실행
~/docker-mysql-dev/init/dump.sql
예시 (`init/dump.sql`):
CREATE TABLE test_table (
id INT PRIMARY KEY,
name VARCHAR(100)
);
INSERT INTO test_table VALUES (1, 'Sample');
⚠️ .sql
내부에 USE 다른DB;
구문이 있으면 .env
의 DB명과 충돌할 수 있으므로 제거 권장
✅ 9. 유의 사항 및 팁
항목 | 설명 |
---|---|
dump.sql 안에 `USE 다른DB;` 구문 있을 경우 | .env 의 MYSQL_DATABASE 와 충돌 가능. SQL에서 제거 권장 |
기존 MySQL 로컬 설치된 경우 충돌 시 | brew services stop mysql 또는 Docker 포트 변경 |
docker-compose down 하면? |
컨테이너는 삭제되지만 volume 에 데이터는 남아있음 |
재설정하려면? | docker-compose down -v (volume 포함 삭제) |
ARM Mac 환경 | platform: linux/arm64 명시 필수 |
volume 위치 | 익명 볼륨이 아닌 ./mysql_data 식의 명시적 디렉토리도 가능 |
✅ 10. 마무리 요약
항목 | 내용 |
---|---|
개발 환경 구성 방식 | Docker + .env + docker-compose.yml |
DB 초기화 | init/dump.sql 자동 실행 |
데이터 유지 | volumes: 설정으로 유지 가능 |
중지/재실행 | down, up -d, restart로 유연한 운영 |
연결 도구 | DataGrip, MySQL Workbench, CLI 모두 가능 |
추가로:
- docker-compose restart 명령어도 있습니다: 컨테이너를 중단 후 즉시 다시 시작함 (down 없이).
- 로그 확인: docker-compose logs -f
'Setting' 카테고리의 다른 글
[Docker/ErrorLog] Homebrew MySQL 삭제 후에도 3306 포트가 점유되는 현상 (0) | 2025.05.04 |
---|---|
[Docker] Docker에서 MySQL 버전 변경 및 dump 파일 교체 방법 (1) | 2025.05.04 |
[Eclipse] Eclipse 폴더별 프로젝트 분류하기 (Working Set 방식) (0) | 2025.04.29 |
[MySQL] Homebrew를 통한 MySQL 설치 (업데이트 버전) (0) | 2025.04.27 |
[VSCode] 단축키 모음 (1) | 2024.01.03 |
댓글