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
파일이 존재하는 컨테이너 디렉터리에 공유를 하면 컨테이너 디렉터리에 존재하던 파일은 사라지고 호스트에서 공유한
디렉터리의 파일로 덮어씌기가 됩니다.
# docker run -it --name volume_dummy alicek106/volume_test
root@27116d92158c:/# ls /home/testdir_2/
test
파일이 존재하는 컨테이너를 생성시켜준 뒤 아래처럼 컨테이너를 생성시켜주고 디렉터리를 확인합니다.
그러면 원래 있던 test 파일이 사라지고 새로 공유시킨 db파일이 존재하는것을 확인할 수 있습니다.
# docker run -it \
--name volume_overide \
-v /home/wordpress_db:/home/testdir_2 \
alicek106/volume_test
root@ba09f45e3335:/# ls /home/testdir_2/
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
1.2 볼륨 컨테이너
이번 방법은 -v 옵션을 사용하는것이 아닌 --volumes-from 옵션을 사용해볼 것 입니다.
--volumes-from옵션과 -v옵션의 차이점은 -v옵션은 호스트의 디렉터리를 공유하는것이고
--volumes-from옵션은 볼륨을 사용하는 A컨테이너의 볼륨을 다른 B컨테이너와 공유를 하게 하는것 입니다.
그러나 이는 직접 볼륨을 공유하는 것이 아닌 -v 옵션을 적용한 컨테이너를 통해 공유하는 것입니다.
아래 예제는 위에서 생성한 volume_overide 컨테이너에서 볼륨을 공유받는 경우입니다.
volume_overide 컨테이너를 통해 volumes_from_container 컨테이너에 다시 공유 하는 것입니다.
# docker run -it \
> --name volumes_from_container \
> --volumes-from volume_overide \
> ubuntu:14.04
root@6dc3cc743b48:/# ls /home/testdir_2/
auto.cnf ca.pem client-key.pem ib_logfile0 ibdata1 performance_schema public_key.pem server-key.pem wordpress
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile1 mysql private_key.pem server-cert.pem sys
1.3 도커 볼륨
나중에 업로드
'Cloud > Doker' 카테고리의 다른 글
[docker] docker -it 와 -d 옵션의 차이점 (0) | 2021.06.23 |
---|---|
[docker] docker 어플리케이션 구동 (0) | 2021.06.22 |
[docker] Docker 시작 (0) | 2021.06.21 |