Pregunta original: ¿Cómo usar la instrucción VOLUME en Dockerfile?
La pregunta real que quiero resolver es: cómo montar volúmenes de host en contenedores docker en Dockerfile durante la compilación, es decir, tener la docker run -v /export:/export
capacidad durante docker build
.
La razón detrás de esto, para mí, es cuando construyo cosas en Docker, no quiero esas apt-get install
cachés ( ) encerradas en un solo docker, sino compartirlas / reutilizarlas. Esa es la razón principal por la que hago esta pregunta.
Última actualización:
Antes de docker v18.09, la respuesta correcta debería ser la que comienza con:
Hay una manera de montar un volumen durante una compilación, pero no involucra Dockerfiles.
Sin embargo, esa fue una respuesta mal planteada, organizada y respaldada. Cuando estaba reinstalando mi docker contiene, me encontré con el siguiente artículo:
Dockerize un servicio apt-cacher-ng
https://docs.docker.com/engine/examples/apt-cacher-ng/
Esa es la solución de Docker para esta / mi pregunta, no directa sino indirectamente. Es la forma ortodoxa que Docker sugiere que hagamos. Y admito que es mejor que el que estaba tratando de preguntar aquí.
Otra forma es la respuesta recién aceptada , por ejemplo, el Buildkit en v18.09.
Elige lo que más te convenga.
Era: había habido una solución: rocker, que no era de Docker, pero ahora que el rocker ha sido descontinuado, revierto la respuesta a "No es posible" nuevamente.
Actualización anterior: Entonces la respuesta es "No es posible". Puedo aceptarlo como respuesta, ya que sé que el problema se ha discutido ampliamente en https://github.com/docker/docker/issues/3156 . Puedo entender que la portabilidad es un problema primordial para el desarrollador de Docker; pero como usuario de Docker, debo decir que estoy muy decepcionado con esta característica que falta. Permítanme cerrar mi argumento con una cita de la discusión antes mencionada: " Me gustaría usar Gentoo como imagen base, pero definitivamente no quiero que> 1 GB de datos del árbol de Portage estén en ninguna de las capas una vez que la imagen ha sido construida. podría tener algunos buenos contenedores compactos si no fuera por el gigantesco árbol de portage que tiene que aparecer en la imagen durante la instalación."Sí, puedo usar wget o curl para descargar lo que necesito, pero el hecho de que solo una consideración de portabilidad me está obligando a descargar> 1 GB de árbol de Portage cada vez que construyo una imagen base de Gentoo no es eficiente ni fácil de usar. Además más aún, el repositorio de paquetes SIEMPRE estará bajo / usr / portage, por lo tanto SIEMPRE PORTÁTIL bajo Gentoo. Nuevamente, respeto la decisión, pero permítame expresar mi decepción también mientras tanto. Gracias.
Pregunta original en detalles:
De
Compartir directorios a través de volúmenes
http://docker.readthedocs.org/en/v0.7.3/use/working_with_volumes/
dice que la función de volúmenes de datos "ha estado disponible desde la versión 1 de la API remota de Docker". Mi docker es de la versión 1.2.0, pero encontré que el ejemplo dado en el artículo anterior no funciona:
# BUILD-USING: docker build -t data .
# RUN-USING: docker run -name DATA data
FROM busybox
VOLUME ["/var/volume1", "/var/volume2"]
CMD ["/usr/bin/true"]
¿Cuál es la forma correcta en Dockerfile de montar volúmenes montados en host en contenedores de docker, a través del 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
. La discusión es bastante extensa, ¿hay alguna forma breve de resumir cuál es la razón?