Pergunta original: Como usar a instrução VOLUME no Dockerfile?
A questão real que quero resolver é: como montar volumes de host em contêineres do Dockerfile durante a compilação, ou seja, ter o docker run -v /export:/export
capacidade durante docker build
.
A razão por trás disso, para mim, é ao criar coisas no Docker, não quero isso (apt-get install
caches ) sejam bloqueados em uma única janela de encaixe, mas para compartilhá-los / reutilizá-los. Essa é a principal razão pela qual estou perguntando sobre essa pergunta.
Última atualização:
Antes da janela de encaixe v18.09, a resposta correta deve ser a que começa com:
Existe uma maneira de montar um volume durante uma compilação, mas isso não envolve os Dockerfiles.
No entanto, essa foi uma resposta mal declarada, organizada e apoiada. Quando eu estava reinstalando minha janela de encaixe, encontrei o seguinte artigo:
Dockerize um serviço apt-cacher-ng
https://docs.docker.com/engine/examples/apt-cacher-ng/
Essa é a solução do docker para esta / minha pergunta, não direta mas indiretamente. É a maneira ortodoxa que o docker nos sugere. E admito que é melhor do que o que eu estava tentando perguntar aqui.
Outra maneira é a resposta recém-aceita , por exemplo, o Buildkit na v18.09.
Escolha o que mais lhe convier.
Foi: Houve uma solução - rocker, que não era da Docker, mas agora que o rocker foi descontinuado, eu reverto a resposta novamente para "Não é possível" novamente.
Atualização antiga: Portanto, a resposta é "Não é possível". Posso aceitá-lo como resposta, pois sei que o problema foi amplamente discutido em https://github.com/docker/docker/issues/3156 . Entendo que a portabilidade é um problema primordial para o desenvolvedor de docker; mas como usuário do docker, devo dizer que estou muito desapontado com esse recurso ausente. Deixe-me encerrar meu argumento com uma citação da discussão acima: " Gostaria de usar o Gentoo como uma imagem de base, mas definitivamente não quero que mais de 1 GB de dados da árvore do Portage estejam em qualquer uma das camadas depois que a imagem for criada. poderia ter alguns recipientes compactos e agradáveis, se não fosse pela gigantesca árvore do portage que aparecesse na imagem durante a instalação."Sim, eu posso usar o wget ou curl para baixar o que precisar, mas o fato de que apenas uma consideração de portabilidade está me forçando a baixar> 1 GB da árvore do Portage cada vez que eu construo uma imagem base do Gentoo não é eficiente nem amigável. além disso, o repositório de pacotes SEMPRE estará em / usr / portage, portanto SEMPRE PORTÁTIL no Gentoo. Mais uma vez, eu respeito a decisão, mas permita-me expressar minha decepção também nesse meio tempo.
Pergunta original em detalhes:
De
Compartilhar diretórios por volumes
http://docker.readthedocs.org/en/v0.7.3/use/working_with_volumes/
ele diz que o recurso de volumes de dados "está disponível desde a versão 1 da API remota do Docker". Minha janela de encaixe é da versão 1.2.0, mas achei o exemplo dado no artigo acima não funcionando:
# BUILD-USING: docker build -t data .
# RUN-USING: docker run -name DATA data
FROM busybox
VOLUME ["/var/volume1", "/var/volume2"]
CMD ["/usr/bin/true"]
Qual é a maneira correta no Dockerfile de montar volumes montados no host em contêineres do docker, através do comando 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
. A discussão é bastante extensa, e existe uma maneira curta de resumir qual é o motivo?