답변:
볼륨은 다음에 저장된 영구 데이터입니다. /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!
Dockerfile
with VOLUME
및 -v /path:/host_path/
플래그 를 사용한다고 가정 해 보겠습니다 . 의 내용 VOLUME
은 /host_path/
? 의 내용으로 대체됩니다 .
docker volume create --name my_volume
뒤에 a docker run --volume-from my_volume
를 수행하면 마운트 지점이 어디에 있는지 어떻게 알 수 있습니까?
docker run ...
에서 my_volume
볼륨에 저장된 파일에 어떻게 쓸 수 있습니까? 나는 ... 경로를 모른다? 아무것도 정의하지 않았기 때문에 실행중인 컨테이너 내부의 볼륨의 내 목소리가 확실하지 않기 때문에 충분히 명확하길 바랍니다 :-/
docker volume create --name aname
생성합니다 . 런타임에 컨테이너 경로를 할당 합니다 : : 이제 해당 컨테이너에 볼륨이 연결되어 / apath 폴더에 마운트됩니다. 나는 그것을 명확히하기 위해 답을 다시 썼다. docker run -v aname:/apath
VOLUME
volumes-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
폴더를.
두 컨테이너를 모두 종료하면 볼륨도 제거됩니다.
--rm
옵션으로 컨테이너를 시작 했기 때문에 삭제됩니다 . 나는 그것을 언급하는 것이 효과가 있다고 생각합니다. 당신이 컨테이너를 시작하지 않은 경우 --rm
, 당신은 여전히 컨테이너를 제거하고 수 익명의 볼륨 과 함께 docker rm -v my-container
.