컨테이너·워크플로우 자동화/DocKer 기본 및 활용

Docker로 MySQL 실행시키기 (feat. 볼륨 Volume)

Data Jun 2025. 10. 11. 23:27

Docker를 이용해 MySQL을 실행시키고, 데이터가 사라지지 않게 볼륨을 연결하는 과정을 정리해보자.
단순히 컨테이너를 띄우는 것뿐 아니라, 컨테이너 내부 접속, 데이터베이스 생성, 재시작 후 유지 여부까지 단계별로 실습했다.

 

MySQL 컨테이너 실행하기

먼저 MySQL 이미지를 실행한다.

docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -d mysql

-e 옵션으로 환경 변수를 지정하고,
-p 옵션으로 호스트(3306)와 컨테이너(3306)의 포트를 연결한다.
-d 옵션은 백그라운드 모드로 실행하는 설정이다.

 

컨테이너 내부 접속하기

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

명령어를 입력하면 실행 중인 MySQL 컨테이너 내부의 bash 쉘로 들어간다.

 

MySQL 접속 및 데이터베이스 생성

mysql -u root -p
show databases;
create database mydb;
show databases;

비밀번호를 입력하고 데이터베이스를 생성해본다.
정상적으로 mydb 가 생성되면 성공!

 

컨테이너 종료 후 재생성 시 데이터 사라짐

docker stop [컨테이너 ID]
docker rm [컨테이너 ID]
docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -d mysql

위와 같이 새로 컨테이너를 만들면,
이전에 생성한 mydb 데이터베이스가 사라진 것을 확인할 수 있다.

이는 컨테이너 내부 데이터가 일시적(휘발성) 이기 때문이다.

 

볼륨(Volume)으로 데이터 유지하기

볼륨을 이용하면 MySQL 데이터를 호스트 컴퓨터에 영구 저장할 수 있다.

mkdir docker-mysql
docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 \
  -v /Users/jaeseong/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql \
  -d mysql

여기서 -v 옵션은
호스트 경로(/Users/.../mysql_data)를 컨테이너 내부의 MySQL 데이터 디렉토리(/var/lib/mysql)와 연결하는 부분이다.

 

볼륨 연결 후 데이터 유지 확인하기

1️⃣ 컨테이너 내부 접속 → MySQL 접속
2️⃣ mydb 데이터베이스 생성
3️⃣ 컨테이너 종료 후 삭제
4️⃣ 같은 볼륨을 연결해 다시 실행

mysql> show databases;

이전에 만든 mydb 가 그대로 남아 있다면 성공!

 

비밀번호 변경이 적용되지 않는 이유

많은 분들이 다음 상황에서 헷갈린다.

 

“새 컨테이너를 띄우면서 MYSQL_ROOT_PASSWORD를 바꿨는데, 왜 비밀번호가 그대로지?”

 

그 이유는 볼륨 안에 이미 기존의 비밀번호 정보가 저장되어 있기 때문이다.
볼륨을 재사용하면 MySQL 설정도 그대로 유지되므로,
비밀번호를 새로 적용하려면 볼륨 폴더를 완전히 삭제 후 재생성해야 한다.

 

 

정리하면

단계 명령어 핵심 설명
1 docker run -d mysql 컨테이너 실행
2 docker exec -it bash 내부 접속
3 mysql -u root -p DB 접속
4 docker rm 삭제 시 데이터 사라짐
5 -v 옵션 볼륨 연결로 데이터 유지

 

  • Docker 컨테이너만 삭제하면 데이터는 사라진다.
  • Volume을 연결하면 데이터가 호스트에 보존된다.
  • 기존 Volume을 재사용하면 설정(비밀번호 포함)도 그대로 유지된다.