본문 바로가기
코딩/Docker

🐳 Docker로 MySQL 실행해보기 - 2 (Volume 활용)

by Leedius 2025. 5. 9.

1️⃣ MySQL 컨테이너 실행 (볼륨 사용)

cd 원하는경로
# !주의: 아래 디렉토리 경로의 마지막 디렉토리(mysql_data)는 미리 만들지 마세요!

docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v 원하는경로/mysql_data:/var/lib/mysql -d mysql
옵션 설명
-e MYSQL_ROOT_PASSWORD=.. 루트 계정의 비밀번호 지정 (필수 환경 변수)
-p 3306:3306 호스트 포트와 컨테이너의 포트 연결
-v 볼륨 마운트 (호스트 경로: 컨테이너 경로)
-d 백그라운드 모드 실행
mysql 사용할 이미지 (없으면 자동 다운로드됨)

 

🔍 주의:

/var/lib/mysql 은 MySQL의 실제 DB 파일 경로이며, 호스트에 연결된 디렉토리를 미리 만들면 안 됩니다.

→ 미리 만들어두면 MySQL 내부 초기 파일들이 덮어씌어져 실행 오류 발생 가능

 


2️⃣ Windows에서 실행 예시

docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v 원하는경로:/var/lib/mysql -d mysql

3️⃣ MySQL 컨테이너 접속

docker exec -it [컨테이너 ID] bash

 


4️⃣ MySQL 접속

mysql -u root -p

비밀번호 입력: password123

 


5️⃣ 데이터베이스 생성 및 확인

SHOW DATABASES;
CREATE DATABASE mydb;
SHOW DATABASES;

 

mydb 라는 DB가 정상적으로 생성된 것을 확인할 수 있음

 


6️⃣ 컨테이너 종료 및 삭제

docker stop [컨테이너 ID]
docker rm [컨테이너 ID]

 


7️⃣ 동일 볼륨으로 컨테이너 다시 생성

docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 \
-v 원하는경로:/var/lib/mysql -d mysql

docker exec -it [컨테이너 ID] bash
mysql -u root -p
SHOW DATABASES;

 

🔍 결과:

앞에서 만든 mydb 데이터베이스가 유지됨

 

📌 이유:

Volume 을 사용하면 데이터가 호스트에 남아 있으므로,

컨테이너를 삭제해도 데이터는 유지

 


8️⃣ 비밀번호 바꾸고 컨테이너 다시 실행

docker stop [컨테이너 ID]
docker rm [컨테이너 ID]

docker run -e MYSQL_ROOT_PASSWORD=pwd123 -p 3306:3306 \
-v 원하는경로:/var/lib/mysql -d mysql

docker exec -it [컨테이너 ID] bash
mysql -u root -p # ❌ 접속 안 됨

 


9️⃣ ❗ 왜 비밀번호가 변경되지 않았을까?

📌 이유:

/var/lib/mysql 경로에 기존 데이터가 이미 저장되어 있기 때문에,

MySQL은 초기화 과정을 건너뛰고 기존 설정을 유지

 즉, 비밀번호도 이전 password123 상태 그대로 유지됨

 


🔟 비밀번호를 변경하려면?

# 기존 볼륨 데이터 삭제
rm -rf 경로

# 윈도우 데스크탑 도커에서는 아래 명령어 사용
Remove-Item -Recurse -Force 폴더명

→ 이후 다시 docker run 명령어로 컨테이너 실행 시,

지정한 MYSQL_ROOT_PASSWORD정상 반영됨

 


✅ 그림으로 이해하기

댓글