Dockerfile에서 볼륨 마운트와 데이터 볼륨 컨테이너 활용하기

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

데이터 볼륨 컨테이너를 사용하면 설정 정보와 데이터를 손쉽게 전달할 수 있습니다.
컨테이너가 삭제되어도 호스트에 저장된 데이터는 영구히 보존됩니다.

태그: docker Dockerfile volume mount data-volume-container

6월 3일 18:49에 게시됨