원래 질문 : Dockerfile에서 VOLUME 명령을 사용하는 방법은 무엇입니까?
실제로 해결하려는 질문은 빌드 중에 Dockerfile의 docker 컨테이너에 호스트 볼륨을 마운트하는 방법, 즉 docker run -v /export:/export
기능을 갖는 방법 docker build
입니다.
그 뒤에 이유는 Docker에서 물건을 만들 때 apt-get install
단일 도커에 캐시 ( )를 잠그고 싶지 않고 공유 / 재사용하기를 원하기 때문입니다. 이것이 제가이 질문에 대해 묻는 주된 이유입니다.
최근 업데이트:
docker v18.09 이전의 정답은 다음으로 시작해야합니다.
빌드 중에 볼륨을 마운트하는 방법이 있지만 Dockerfile은 포함하지 않습니다.
그러나 그것은 잘못 언급되고 체계적이며 지원되는 답변이었습니다. 도커에 포함 된 내용을 다시 설치할 때 다음 기사를 우연히 발견했습니다.
apt-cacher-ng 서비스도 커화
https://docs.docker.com/engine/examples/apt-cacher-ng/
이것이 직간접 적이 아닌이 질문에 대한 도커의 솔루션입니다. 도 커가 우리에게 제안하는 정통 방식입니다. 그리고 나는 내가 여기에 물어 보던 것보다 낫다는 것을 인정합니다.
또 다른 방법은 새로 승인 된 답변입니다 (예 : v18.09의 Buildkit).
당신에게 맞는 것을 고르세요.
: Docker가 아닌 Rocker라는 해결책이 있었지만 이제 Rocker가 중단되었으므로 대답을 다시 "불가능"으로 되돌립니다 .
이전 업데이트 : 답변은 "불가"입니다. https://github.com/docker/docker/issues/3156 에서 문제가 광범위하게 논의되었다는 것을 알고 답변으로 받아 들일 수 있습니다 . 이식성이 도커 개발자에게 가장 중요한 문제라는 것을 이해할 수 있습니다. 도커 사용자 로서이 누락 된 기능에 대해 매우 실망했다고 말해야합니다. 앞서 언급 한 논의에서 인용 한 인용문을 인용 하겠습니다 . " 젠투를 기본 이미지로 사용하고 싶지만 일단 이미지가 만들어진 후에는 1GB 이상의 포티지 트리 데이터를 어떤 레이어에도 포함하고 싶지 않습니다. 설치 중에 이미지에 거대한 포티지 트리가 나타나지 않으면 컴팩트 한 컨테이너를 가질 수 있습니다."네, wget이나 curl을 사용하여 필요한 것을 다운로드 할 수 있지만, 단지 이식성 만 고려하면 Gentoo 기본 이미지를 만들 때마다> 1GB의 포티지 트리를 다운로드해야한다는 사실이 효율적이거나 사용자 친화적이지 않습니다. 더욱이 패키지 저장소는 항상 / usr / portage 아래에 있으므로 Gentoo에서는 항상 이식 가능합니다. 다시 한 번, 결정을 존중하지만 그 동안 실망을 표현할 수있게 해주세요. 감사합니다.
세부적인 원래 질문 :
에서
볼륨을 통한 디렉토리 공유
http://docker.readthedocs.org/en/v0.7.3/use/working_with_volumes/
데이터 볼륨 기능은 "Docker Remote API 버전 1부터 사용 가능합니다"라고 말합니다. 내 도커 버전은 1.2.0이지만 위 기사에서 제공된 예제가 작동하지 않는 것을 발견했습니다.
# BUILD-USING: docker build -t data .
# RUN-USING: docker run -name DATA data
FROM busybox
VOLUME ["/var/volume1", "/var/volume2"]
CMD ["/usr/bin/true"]
Dockerfile에서 VOLUME 명령을 통해 호스트 마운트 볼륨을 도커 컨테이너에 마운트하는 올바른 방법은 무엇입니까?
$ apt-cache policy lxc-docker
lxc-docker:
Installed: 1.2.0
Candidate: 1.2.0
Version table:
*** 1.2.0 0
500 https://get.docker.io/ubuntu/ docker/main amd64 Packages
100 /var/lib/dpkg/status
$ cat Dockerfile
FROM debian:sid
VOLUME ["/export"]
RUN ls -l /export
CMD ls -l /export
$ docker build -t data .
Sending build context to Docker daemon 2.56 kB
Sending build context to Docker daemon
Step 0 : FROM debian:sid
---> 77e97a48ce6a
Step 1 : VOLUME ["/export"]
---> Using cache
---> 59b69b65a074
Step 2 : RUN ls -l /export
---> Running in df43c78d74be
total 0
---> 9d29a6eb263f
Removing intermediate container df43c78d74be
Step 3 : CMD ls -l /export
---> Running in 8e4916d3e390
---> d6e7e1c52551
Removing intermediate container 8e4916d3e390
Successfully built d6e7e1c52551
$ docker run data
total 0
$ ls -l /export | wc
20 162 1131
$ docker -v
Docker version 1.2.0, build fa7b24f
VOLUME ~/host_dir ~/container_dir
. 토론은 매우 광범위합니다. 이유가 무엇인지 요약 할 수있는 짧은 방법이 있습니까?