Docker로 MySQL 컨테이너를 실행할 때, 서버를 재시작하거나 컨테이너를 재생성(down 후 up)하면 데이터가 사라질까봐 걱정이 될거라고 생각한다.
이 글에서는 Docker Compose를 사용하여 MySQL 데이터를 안전하게 보존하는 방법을 단계별로 소개하려고 한다.
컨테이너를 재생성하면 데이터가 유지되지 않는 경우가 있다.
- 컨테이너를 down했다가 다시 up했을 때 데이터가 사라짐.
- --volumes 옵션 사용으로 볼륨까지 삭제되는 실수.
- Docker에서 볼륨이 제대로 설정되지 않은 경우.
이러한 문제를 방지하려면 Docker 볼륨을 활용해야 한다.
Docker 볼륨을 활용한 데이터 보존
Docker 볼륨은 컨테이너가 삭제되더라도 데이터는 남아 있게 한다.
아래는 설정 및 작동 원리이다.
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
volumes:
- ./src:/app/src
- ./build.gradle:/app/build.gradle
- ./settings.gradle:/app/settings.gradle
- ./gradle:/app/gradle
command: >
sh -c "./gradlew --no-daemon compileJava --continuous &
./gradlew --no-daemon bootRun"
environment:
SPRING_DEVTOOLS_RESTART_ENABLED: "true"
SPRING_DATASOURCE_URL: jdbc:mysql://mysql-container:3306/playground
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: 1234
depends_on:
- mysql-container
mysql-container:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: playground
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
조금.. 난잡할 수 있겠지만 핵심은 여기에 있다.
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
- playground_mysql_data라는 Docker 볼륨이 생성
- MySQL 컨테이너는 이 볼륨에 데이터를 저장
- 컨테이너를 down해도 볼륨 데이터는 삭제되지 않음
- 컨테이너를 다시 up하면 동일한 데이터를 다시 사용할 수 있음.
docker volume ls
해당 명령어로 볼륨이 잘 실행되고 있는지를 확인할 수 있는데

보이는 것처럼 건강하게 잘 살아있다.
그럼 해당 볼륨이 진짜 내 데이터를 담고 있는지도 확인해 보아야 할 것이다.
(개발자는 항상 꼼꼼함이 필수이다. 되겠지라고 생각하고 넘어가면 코딩인생 망한다고 누군가가 그랬다)
docker exec -it playground-mysql-container-1 bash
해당명령어로 조회할 수 있다.

그럼 mysql에 로그인해주면 된다.
그 코드는
mysql -u root -p
이걸 입력하면 비번 치라고 나오는데 비번 치면 된다.

그 다음 쿼리문을 쳐주면 끝

엄마와 자식이 오순도순 잘 있는걸 확인할 수 있다.
그 뒤에 down 하고 up을 해보고 진짜로 살아있는지 테스트해보자.
(난 살아있었다)
'Docker' 카테고리의 다른 글
| docker를 이용해서 나만의 서버를 배포해보자. (1) | 2024.12.14 |
|---|---|
| Docker개발환경에서 빠르게 코드 변경사항 저장하기 (3) | 2024.11.20 |
| docker를 이용해서 팀 프로젝트 초기환경 세팅을 해보자! (0) | 2024.11.20 |