도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되며 컨테이너의 변경 사항은 별도로 저장해서 각 컨테이너의 정보를 보존함.
이미지와 컨테이너 구조
생성된 이미지는 어떠한 경우에도 변경되지 않음. 하지만 이러한 구조에는 치명적인 단점이 있는데 컨테이너를 삭제하면 내부에 있는 데이터가 모두 사라진다는 것임.
이를 방지하기 위해 컨테이너의 데이터를 영속적 데이터로 활용할 필요성이 있음.
docker run -d \
--name {name}
-v {local_host_volume_path}:{docker_volume_path}
이때 호스트의 디렉터리가 존재하지 않아도 도커는 자동으로 폴더를 생성해줍니다!
이때 local_host_volume 과 docker_volume_path 는 동기화 되어있는 폴더가 아니고 완전히 같은 폴더임.
정확히는 -v 옵션을 통한 호스트 볼륨 공유는 호스트의 디렉터리를 컨테이너의 디렉터리에 마운트함
docker volume 과 host volume 구조
볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유하는 방법 --volumes-from 옵션을 설정하면 -v 또는 --volume 옵션을 적용한 컨테이너의 볼륨 디렉터리를 공유할 수 있음
docker run -i -t \
--name volumes_from_container \
--volumes-from volume_override \
ubuntu:14.04
volume_override 컨테이너는 host와 볼륨을 공유하고 volumes_from_container 는 volume_override 컨테이너와 볼륨을 공유함
결국에는 두 컨테이너가 같은 볼륨을 공유하는 것임
도커 자체에서 제공하는 볼륨 기능을 활용해 데이터를 보존하는 방법
# 도커 볼륨 생성
docker volume create --name testVolume
# 도커 볼륨 확인
docker volume ls
호스트와 볼륨을 공유할 때 사용한 -v 옵션의 입력과는 다르게 다음과 같은 형식으로 입력해야 함
docker run -i -t --name myvolume_1 \
-v myvolume:/root/ \
ubuntu:14.04
docker inspect 명령어를 사용하면 생성한 볼륨이 실제로 어디에 저장되는지 알 수 있음
# docker inspect --type volume testVolume
docker volume create 명령을 별도로 입력하지 않아도 -v 옵션을 입력할 때 이를 수행하도록 설정 할 수 있음
docker run -i -t --name volume_auto \
-v /root \
ubuntu:14.04