Dockerfile로 볼륨 마운트 구현하기
Dockerfile을 활용하면 컨테이너 내 특정 디렉토리를 호스트와 공유하는 볼륨을 마운트할 수 있습니다.
Dockerfile 작성
# Dockerfile 내용
FROM centos
VOLUME ["/data01", "/data02"]
CMD ["/bin/bash"]
이미지 빌드
docker build -t mycentos:latest .
컨테이너 실행 및 확인
# 이미지 확인
docker images
# 컨테이너 실행
docker run -it mycentos:latest /bin/bash
# 컨테이너 내부 확인
ls -l /
# volume01, volume02 디렉토리가 생성됨
호스트 볼륨 경로 확인
# 컨테이너 ID 확인
docker ps
# 상세 정보 조회
docker inspect <container_id>
파일 동기화 테스트
컨테이너 내에서 파일을 생성한 후 호스트에서 동일한 파일이 존재하는지 확인합니다.
# 컨테이너 내부
cd /data01
touch test.txt
exit
# 호스트에서 확인 (경로는 inspect 결과에서 확인)
cd /var/lib/docker/volumes/<volume_hash>/_data
ls
# test.txt 파일이 존재함
데이터 볼륨 컨테이너
데이터 볼륨 컨테이너는 여러 컨테이너 간에 데이터를 공유하는 방법입니다.
컨테이너 생성
# 첫 번째 컨테이너 생성
docker run -it --name centos01 mycentos:latest /bin/bash
# 두 번째 컨테이너 생성 (centos01의 볼륨 공유)
docker run -it --name centos02 --volumes-from centos01 mycentos:latest /bin/bash
# 세 번째 컨테이너 생성 (centos01의 볼륨 공유)
docker run -it --name centos03 --volumes-from centos01 mycentos:latest /bin/bash
데이터 공유 테스트
# centos01에서 파일 생성
docker attach centos01
cd /data01
touch centos01_file
exit
# centos02에서 파일 확인
docker attach centos02
cd /data01
ls
# centos01_file 확인 가능
# centos03에서 파일 생성 후 centos01에서 확인
docker attach centos03
cd /data01
touch centos03_file
exit
docker attach centos01
cd /data01
ls
# centos03_file 확인 가능
컨테이너 삭제 후 데이터 확인
# centos01 삭제
docker rm centos01
# centos02, centos03에서 데이터 확인
docker attach centos02
cd /data01
ls
# centos01_file, centos03_file 모두 존재
# 결론: 데이터는 공유가 아닌 복사(백업) 방식으로 전달됨
실전 예제: MySQL 데이터 공유
MySQL 컨테이너 2개 생성 및 데이터 공유
# 첫 번째 MySQL 컨테이너 생성
docker run -d -p 3307:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=password --name mysql01 mysql:5.7
# 두 번째 MySQL 컨테이너 생성 (mysql01의 볼륨 공유)
docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=password --name mysql02 --volumes-from mysql01 mysql:5.7
데이터 생성 및 확인
# mysql01에 접속하여 데이터베이스 생성
docker exec -it mysql01 /bin/bash
mysql -uroot -ppassword
CREATE DATABASE shared_db;
EXIT;
exit
# mysql01 중지
docker stop mysql01
# mysql02에 접속하여 데이터 확인
docker exec -it mysql02 /bin/bash
mysql -uroot -ppassword
SHOW DATABASES;
# shared_db 확인 가능
EXIT;
exit
데이터 볼륨 컨테이너를 사용하면 설정 정보와 데이터를 손쉽게 전달할 수 있습니다.
컨테이너가 삭제되어도 호스트에 저장된 데이터는 영구히 보존됩니다.