2016-09-04 3 views
0

Docker 주위에서 내 길을 배울 때 나와 함께 감내하십시오. 사용 중입니다. v1.11.1Dockerfile, 볼륨이있는 데이터 유지

Dockerfile을 만들고 있는데 컨테이너의 폴더를 유지해야한다고 지정하려는 경우 사용자 (컨테이너를 실행하는 컴퓨터) 당 유지해야합니다.

VOLUME /path/to/dir/to/persist 

충분하다,하지만 난 docker run -t -i myimage:latest bash 내 컨테이너를 시작하고 수동으로 다음 exit에 파일을 추가 할 때 나는 다시 내 파일을 찾을 수 있기를 기대 : 나는 원래 포함하는 것을 생각했다. 그러나 이미지를 다시 실행할 때 (위와 같이) 추가 된 파일은 더 이상 존재하지 않습니다.

  • 난에 -v를 사용하지 않으 :

    나는 주위를 읽었습니다하지만 대답은 볼륨의 사용에 관해서 오래된 중 하나 것, 또는이다, 내가하지 않고 할 일을 제안 차라리 볼륨 컨테이너를 만들지 것

  • 명령은 내가 잘못이 무엇

입니다 (내 하나 개의 작은 폴더에 대한 과잉처럼 보인다)을 실행? 어떤 도움이라도 대단히 감사하겠습니다.

건배!

업데이트 : 작동하지 않습니다 VOLUME name:/path/to/persist를 포함하는 Dockerfile와 docker run -v name:/path/to/persist -t -i myimage:latest bash 그러나 건물 : 내가 명명 된 볼륨의 예를 사용하여 데이터를 유지할 수 있습니다.

답변

1

"도커 실행"을 할 때마다 새로운 컨테이너를 만드는 것이 분명하지는 않습니다. 각각의 새 컨테이너에는 새 볼륨이 있습니다.

데이터가 지속되지만 사용자가 작성한 컨테이너에서 데이터를 읽지는 않습니다.

FROM ubuntu 
VOLUME /data 

가 정상으로 내장 Dockerfile

$ docker build . -t myimage 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM ubuntu 
---> bd3d4369aebc 
Step 2 : VOLUME /data 
---> Running in db84d80841de 
---> 7c94335543b8 

이제 문제를

샘플을 보여 두 번

$ docker run -ti myimage echo hello world 
$ docker run -ti myimage echo hello world 

그것을 실행하고 볼륨 살펴보고

$ docker volume ls 
DRIVER    VOLUME NAME 
local    078820609d31f814cd5704cf419c3f579af30672411c476c4972a4aad3a3916c 
local    cad0604d02467a02f2148a77992b1429bb655dba8137351d392b77a25f30192b 

"docker rm"명령에는 컨테이너와 관련된 모든 볼륨을 정리하는 특수 "-v"옵션이 있습니다.

$ docker rm -v $(docker ps -qa) 

같은 고정 표시기 이미지를 사용하여 데이터 컨테이너

를 사용하는 방법, 앞의 예에 내장 된 그의 유일한 목적은 볼륨

$ docker create --name mydata myimage 

실행 또 다른의를 통해 데이터를 유지하는 것입니다 컨테이너를 만듭니다 일부 데이터를 "/ 데이터"볼륨에 저장하는 컨테이너

$ docker run -it --rm --volumes-from mydata myimage bash 
[email protected]:/# echo hello world > /data/helloworld.txt 
[email protected]:/# exit 

실행 데이터

$ docker run -it --rm --volumes-from mydata myimage cat /data/helloworld.txt 
hello world 

정리

를 검색하는 두 번째 컨테이너는, 단순히 컨테이너를 제거하고 그 볼륨이 정리되었는지 확인하기 위해 "-v"옵션을 지정합니다.

$ docker rm -v mydata 

주 :

  • 은 "볼륨-에서"매개 변수는 모든 데이터가 "mydata을"용기
  • 컨테이너를 실행하는 "RM은"옵션과 관련된 기본 볼륨에 저장됩니다 의미 자동으로 제거되어 일회용 용기에 유용합니다.
+0

모든 정보 주셔서 감사합니다. 하지만 Dockerfile이 아닌 명령 줄에서 성공적으로 명명 된 볼륨을 사용할 수 있습니까? 그것이 내가 혼란스러워하는 것입니다 (제 업데이트를보십시오). 공식 문서에서는 더 이상 볼륨 컨테이너를 사용하지 않아야하므로 더 혼란 스럽습니다. –

+0

@ D.Mill 명명 된 볼륨은 데이터 관리를위한 또 다른 옵션이며 새로운 스토리지 플러그인과 결합하면 가장 잘 작동합니다. 여기서 Dockerfile 내부에 선언 된 볼륨을 지원하고 예상대로 작동하지 않는 이유를 설명하는 내용에 집중했습니다. 결론적으로 Docker 파일은 런타임이 아닌 빌드시에 사용되므로 볼륨을 로컬 저장소 (이름이 지정되거나 다른 이름)에 매핑 할 수없는 이유가 있습니다. Dockerfiles는 이미지를 만들고 이미지는 컨테이너를 만드는 데 사용됩니다. 컨테이너를 실행할 때만 저장소를 가리키고 싶은 위치를 알 수 있습니다. –