on
[4일차] docker 볼륨 사용법 3가지
[4일차] docker 볼륨 사용법 3가지
1. 컨테이너 볼륨
도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되며
컨테이너의 변경 사항만 별도로 저장해서 각 컨테이너의 정보를 보존합니다.
아래와 같은 구조를 보입니다.
이미지와 컨테이너의 구조
이미 생성된 이미지는 어떠한 경우로도 변경되지 않으며, 컨테이너 레이어에 원래 이미지에서 변경된 파일 시스템 등을 저장합니다. 이미지에 mysql을 실행하는 데 필요한 애플리케이션 파일이 들어있다면 컨테이너 레이어에는 워드프레스에서 쓴 로그인 정보나 게시글 등과 같이 데이터베이스를 운용하면서 쌓이는 데이터가 저장됩니다.
하지만 mysql 컨테이너를 삭제하면 컨테이너 레이어에 저장돼있던 데이터베이스의 정보도 삭제가 됩니다.
이를 해결하고자 볼륨을 활용하는 것입니다.
볼륨을 사용하는 방법에는 3가지가 존재합니다.
1. 호스트 볼륨 공유
2. 볼륨 컨테이너
3. 도커 볼륨
1.1 호스트 볼륨 공유
호스트 볼륨 공유란 말 그대로 호스트에 있는 디렉터리와 컨테이너의 디렉터리를 서로 공유 하는것 입니다.
# docker run -d \ --name wordpressdb_hostvolume \ -e MYSQL_ROOT_PASSWORD=1234 \ -e MYSQL_DATABASE=wordpress \ -v /home/wordpress_db:/var/lib/mysql \ mysql:5.7
# docker run -d \ -e WORDPRESS_DB_USER=root \ -e WORDPRESS_DB_PASSWORD=1234 \ --name wordpress_hostvolume \ --link wordpressdb_hostvolume:mysql \ -p 80:80 \ wordpress
위 예제는 -v 옵션을 추가했고, 옵션의 값은 /home/wordpress_db 디렉터리와 컨테이너의 /var/lib/mysql/ 디렉터리를 공유한다는 뜻입니다.
/home/wordpress_db 디렉터리를 미리 생성하지 않아도 도커는 자동으로 디렉터리를 생성합니다.
컨테이너를 생성하고 디렉터리를 확인해보면 mysql 관련 파일들이 공유됐습니다.
# ls /home/wordpress_db/ auto.cnf client-cert.pem ib_logfile0 mysql public_key.pem sys ca-key.pem client-key.pem ib_logfile1 performance_schema server-cert.pem wordpress ca.pem ib_buffer_pool ibdata1 private_key.pem server-key.pem
이제 컨테이너를 삭제해 파일이 보존되는지 확인합니다.
# docker rm -f $(docker ps -qa)
다시 디렉터리를 확인해 보면 그대로 남아있는것을 확인할 수 있습니다.
# ls /home/wordpress_db/ auto.cnf client-cert.pem ib_logfile0 mysql public_key.pem sys ca-key.pem client-key.pem ib_logfile1 performance_schema server-cert.pem wordpress ca.pem ib_buffer_pool ibdata1 private_key.pem server-key.pem
추가로 -v옵션을 여러개 사용한 공유도 아래와 같이 가능하며,
# echo hello >> /home/hello && echo hello2 >> /home/hello2 # docker run -it \ --name file_volume \ -v /home/hello:/hello \ -v /home/hello2:/hello2 \ ubuntu:14.04 root@cf21efb72618:/# cat hello hello root@cf21efb72618:/# cat hello2 hello2
파일이 존재하는 컨테이너 디렉터리에 공유를 하면 컨테이너 디렉터리에 존재하던 파일은 사라지고 호스트에서 공유한
디렉터리의 파일로 덮어씌기가 됩니다.
반응형
from http://yoonsu.tistory.com/20 by ccl(A) rewrite - 2021-07-12 16:25:05