이번에는 워드프레스와 MySQL을 링크하여 컨테이너가 삭제되어도 호스트 경로에 데이터가 보존되는 바인드 마운트를 구현해본다.
WordPress와 MySQL 링크(--link)에 대한 내용은 아래 포스팅에 자세히 정리되어 있다.
https://nanujahope.tistory.com/101
1. MySQL 컨테이너 실행 (Host Volume 마운트)
가장 먼저 데이터베이스 컨테이너를 생성한다.
핵심은 컨테이너 내부의 데이터가 저장되는 경로를 내 로컬 호스트의 경로와 연결하는 것이다.
docker run -d --name wp_db \
-e MYSQL_ROOT_PASSWORD=rootoor \
-e MYSQL_DATABASE=wordpress \
-v /home/wp_mysql:/var/lib/mysql \
mysql:5.7
참고로, Docker의 -v (volume) 옵션을 사용하면 명령어를 실행했을 때 지정한 호스트 경로(/home/wp_mysql)가 실제로 존재하지 않는다면, Docker가 알아서 해당 경로에 디렉토리를 새로 만든 후 컨테이너와 연결(mount)해준다.
다만, Docker가 없는 디렉터리를 자동으로 생성해 줄 때는 해당 디렉터리의 소유자를 root로 설정한다는 것을 알고 있어야 한다.
동작 원리

컨테이너가 실행되면서 /var/lib/mysql에 데이터를 쓰면, 이는 사실상 호스트의 /home/wp_mysql에 쓰는 것과 동일하다. 즉, 컨테이너라는 가상의 벽을 뚫고 호스트의 디스크에 직접 데이터를 기록하는 셈이다.
마운트 결과 확인
실제로 호스트 경로에 데이터가 생성되었는지 확인한다.
ls /home
... wp_mysql
ls /home/wp_mysql/
auto.cnf ca.pem client-key.pem ibdata1 ib_logfile1 mysql performance_schema public_key.pem server-key.pem wordpress
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile0 ibtmp1 mysql.sock private_key.pem server-cert.pem sys
컨테이너를 실행하기 전에는 없었던(혹은 비어있던) /home/wp_mysql 디렉토리에 MySQL 초기화 데이터 파일들(ibdata1, mysql 폴더 등)이 생성된 것을 볼 수 있다. 이는 컨테이너 내부의 MySQL 프로세스가 초기화되면서 데이터를 쓴 결과가 호스트에 반영된 것이다.
2. WordPress 컨테이너 실행 및 연동
이제 데이터베이스를 사용하는 웹 애플리케이션인 WordPress 컨테이너를 띄우고 앞서 만든 wp_db 컨테이너와 연결한다.
docker run -d --name wp_home \
-e WORDPRESS_DB_PASSWORD=rootoor \
--link wp_db:mysql \
-p 80 \
wordpress:latest
- -e WORDPRESS_DB_PASSWORD=rootoor: DB 접속 비밀번호를 환경변수로 전달한다. 앞서 wp_db 컨테이너 생성 시 설정한 비밀번호와 일치해야 한다.
- --link wp_db:mysql:
- wp_db라는 컨테이너를 이 컨테이너 내부에서 mysql이라는 호스트명으로 호출할 수 있게 연결한다.
- 참고: --link는 레거시 옵션이며, 현재는 Docker Network를 사용하는 것이 권장되지만, 간단한 1:1 연결 실습이므로 직관적인 방법을 선택함.
- -p 80 (Dynamic Port Mapping):
- 호스트의 포트를 명시하지 않고 컨테이너 포트만 지정했다.
- 이 경우 도커는 호스트의 남는 포트 중 하나를 무작위로 할당하여 컨테이너의 80번 포트와 연결한다.
컨테이너 상태 확인
docker ps
CONTAINER ID IMAGE ... PORTS NAMES
e196af2f98ea wordpress:latest ... 0.0.0.0:32769->80/tcp, :::32769->80/tcp wp_home
7abf12708132 mysql:5.7 ... 3306/tcp, 33060/tcp wp_db
docker ps 결과를 보면 wp_home 컨테이너의 포트가 0.0.0.0:32769->80/tcp로 매핑된 것을 확인할 수 있다.
즉, 외부에서 브라우저를 통해 http://localhost:32769로 접속하면 워드프레스 화면을 볼 수 있다.
3. 데이터 영속성(Persistence) 검증
Host Volume을 사용한 주된 목적은 "컨테이너가 사라져도 데이터는 남는다"는 것을 확인하기 위함이다.
이를 검증하기 위해 실행 중인 모든 컨테이너를 강제로 중지하고 삭제 상황을 시뮬레이션한다.
컨테이너 일괄 중지
docker stop $(docker ps -aq)
e196af2f98ea
7abf12708132
...
데이터 생존 확인
컨테이너가 모두 멈춘(Stop) 상태에서 다시 호스트의 디렉토리를 확인한다.
ls /home/wp_mysql/
auto.cnf ca.pem client-key.pem ibdata1 ib_logfile1 mysql.sock private_key.pem server-cert.pem sys
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile0 mysql performance_schema public_key.pem server-key.pem wordpress
확인해보면, 컨테이너 프로세스는 종료되었지만 /home/wp_mysql 경로의 데이터 파일들은 그대로 남아있는 것을 알 수 있다.

'AI Journey > 클라우드' 카테고리의 다른 글
| [Docker] Dockerfile을 이용해서 이미지 빌드하고 실행하기 (1) - Nginx (0) | 2026.01.07 |
|---|---|
| [Docker] Volume을 활용한 정적 웹사이트 배포와 컨테이너 간 데이터 공유 (0) | 2026.01.06 |
| [Docker] 바인드 마운트(Bind Mount)를 활용한 데이터 동기화 (2) (0) | 2026.01.05 |
| [Kubernetese] 스프링부트(Spring boot) 서버를 파드(Pod)로 띄우기 (0) | 2026.01.03 |
| [Docker] 바인드 마운트(Bind Mount)를 활용한 데이터 동기화 (0) | 2026.01.01 |