[docker] Dockerfile에서 VOLUME의 목적은 무엇입니까?

Docker의 볼륨에 대해 더 깊이 이해하려고 노력하고 있으며 다음과 같은 차이점 / 사용 사례를 파악하는 데 어려움을 겪고 있습니다.

  • docker volume create명령
  • 그만큼 docker run -v /path:/host_path
  • 파일 의 VOLUME항목Dockerfile

특히 VOLUME항목을 -v플래그 와 결합하면 어떤 일이 발생하는지 이해하지 못합니다 .



답변

볼륨은 다음에 저장된 영구 데이터입니다. /var/lib/docker/volumes/...

  • Dockerfile에서 선언 할 수 있습니다. 즉, 컨테이너가 이미지에서 시작될 때마다 옵션 이 없더라도 볼륨이 생성됩니다 ( empty ) -v.

  • 런타임에 선언 할 수 있습니다 docker run -v [host-dir:]container-dir.
    두 개 ( VOLUME+ docker run -v)를 결합하면 호스트 폴더의 내용을 컨테이너에 의해 유지되는 볼륨에 마운트 할 수 있습니다./var/lib/docker/volumes/...

  • docker volume create 는 Dockerfile을 정의하고 이미지를 빌드하고 컨테이너를 실행할 필요없이 볼륨을 생성 합니다. 다른 컨테이너가 해당 볼륨을 빠르게 마운트 할 수 있도록하는 데 사용됩니다.

볼륨에 일부 콘텐츠를 유지했지만 그 이후 컨테이너를 삭제 한 경우 (기본적으로 docker rm -v를 사용하지 않는 한 관련 볼륨을 삭제하지 않음) 해당 볼륨을 새 컨테이너에 다시 연결할 수 있습니다 (선언 같은 볼륨).

Docker-컨테이너에 연결되지 않은 볼륨에 액세스하는 방법 “을 참조하십시오 .
docker volume create를 사용하면 명명 된 볼륨을 컨테이너에 쉽게 다시 연결할 수 있습니다.

docker volume create --name aname
docker run -v aname:/apath --name acontainer
...
# modify data in /apath
...
docker rm acontainer

# let's mount aname volume again
docker run -v aname:/apath --name acontainer
ls /apath
# you find your data back!


답변

VOLUMEvolumes-from런타임 매개 변수 와 결합하면 명령이 흥미로워집니다 .

다음 Dockerfile이 주어지면 :

FROM busybox
VOLUME /myvolume

다음을 사용하여 이미지를 만듭니다.

docker build -t my-bb .

다음을 사용하여 컨테이너를 회전합니다.

docker run --rm -it --name my-first-bb my-bb

가장 먼저 주목할 점은이 이미지에라는 폴더가 있다는 것 myvolume입니다. 그러나 컨테이너를 종료하면 볼륨도 제거되므로 특히 흥미롭지 않습니다.

이 폴더에 빈 파일을 생성하므로 컨테이너에서 다음을 실행합니다.

cd myvolume
touch hello.txt

이제 새 컨테이너를 회전하되 다음과 동일한 볼륨을 공유합니다 my-first-bb.

docker run --rm -it --volumes-from my-first-bb --name my-second-bb my-bb

당신은 그 볼 my-second-bb파일이 들어 hello.txt있는 myvolume폴더를.

두 컨테이너를 모두 종료하면 볼륨도 제거됩니다.


답변