본문 바로가기
Setting

[Docker/MySQL] Docker로 MySQL 개발 환경 구축하기

by clolee 2025. 5. 4.

✅ [실무 가이드] 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;` 구문 있을 경우 .envMYSQL_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

댓글