2016-06-29 2 views
3

Docker의 초보자이고 Volumes 항목을 더 잘 이해하려고합니다. 컨테이너가 생성 될 때Docker 이미지를 업데이트 할 때의 볼륨

  • 볼륨이 초기화됩니다 여기에 나는 것을 알 수있다. 컨테이너의 기본 이미지에 지정된 마운트 지점에 데이터가 들어 있으면 볼륨 초기화시 기존 데이터가 새 볼륨에 복사됩니다. 호스트 디렉토리를 마운트하는 경우에는 적용되지 않습니다.
  • 데이터 볼륨을 컨테이너간에 공유하고 다시 사용할 수 있습니다.
  • 데이터 볼륨에 대한 변경은 직접 이루어집니다.
  • 이미지를 업데이트 할 때 데이터 볼륨에 대한 변경 내용은 포함되지 않습니다.
  • 데이터 볼륨은 컨테이너 자체가 삭제 된 경우에도 유지됩니다.
  • 데이터 볼륨은 컨테이너의 수명주기와 상관없이 데이터를 유지하도록 설계되었습니다. 따라서 Docker는 컨테이너를 제거 할 때 자동으로 볼륨을 삭제하지 않으며 컨테이너에서 더 이상 참조하지 않는 볼륨을 "가비지 수집"하지 않습니다. 이미지를 업데이트 할 때

    는 데이터 볼륨에
    • 변경은 포함되지 않습니다이를 제외하고, 매우 분명하다

    .

저는이 사실을 더 잘 이해하고 있습니다. 누구나 좀 더 명확한 개요를 제공 할 수 있습니까?

감사합니다.

답변

1

데이터 볼륨이 다른 프로세스 (다른 컨테이너 또는 다른 시스템에서 변경 될 수 있음)에 의해 변경되는 경우 변경 사항이 포함되거나 기록되지 않는다고 말하고 싶습니다. 아주 분명하다.

4

볼륨은 컨테이너 파일 시스템의 외부입니다. 런타임에 마운트되지만 컨테이너의 데이터는 컨테이너에 저장되지 않습니다. 다음의 예제를 보자 :

[email protected] $ docker volume create --name my-data

이 볼륨을 (아직 용기가) my-data를 호출되지 만듭니다. 이제 새 컨테이너를 만들고이 볼륨을 컨테이너 내에서 /inside/data에 마운트합니다.

[email protected] $ docker run -it -v my-data:/inside/data --name container1 alpine:3.3 sh

지금 내 용기 안에 내 쉘, 그래서 나는 폴더 /inside/data 안에 새 파일을 만듭니다.

[email protected] $ cd /inside/data && touch my-file

지금 /inside/data 정말 내 컨테이너 파일 시스템에 아니라, 그 단지에 장착되어, 용기의 외부에 살고있는 볼륨입니다. 내 컨테이너를 중지하고 _don't 경우 있음을 탑재 다시 볼륨, 내 파일이 없습니다.

[email protected] $ exit 
[email protected] $ docker run -it --name container2 alpine:3.3 sh 
[email protected] $ ls /inside/data 
ls: /inside/data: No such file or directory 
[email protected] $ exit 

실제로 폴더가 없습니다! 나는 그 위치에 아무 것도 올려 놓지 않았기 때문에. 볼륨을 사용 중이므로 데이터가 컨테이너에 유지되지 않습니다. 그러면 어떻게 다시 찾을 수 있습니까? 음 은 볼륨에으로 유지됩니다 (my-data). 그것을 다른 컨테이너에 마운트하여 보도록하겠습니다 (같은 지점에 마운트 할 필요가 없습니다. 다른 것을 사용할 것입니다).

[email protected] $ docker run -it -v my-data:/different/folder --name container3 alpine:3.3 sh 
[email protected] $ ls /different/folder 
my-file 
[email protected] $ exit 

좋아요. 데이터를 가져 와서 다른 컨테이너에 마운트 할 수 있습니다. 그러나 실제로 볼륨의 데이터는 인데이 살고 있습니까? 내 호스트 파일 시스템에서. 우리는 수행하여 확인할 수 있습니다

[email protected] $ docker volume inspect my-data 
[ 
    { 
     "Name": "my-data", 
     "Driver": "local", 
     "Mountpoint": "/var/lib/docker/volumes/my-data/_data", 
     "Labels": {}, 
     "Scope": "local" 
    } 
] 

확인을, 그것은 나를 알 수 있도록 내 호스트 시스템에서 해당 볼륨의 위치,의 거기에 무엇이 살펴 보자 (이 루트가 소유하고 있기 때문에 우리는 sudo를 필요).

[email protected] $ sudo ls /var/lib/docker/volumes/my-data/_data 
my-file 

그리고 파일이 있습니다.

관련 문제