Question d'origine: comment utiliser l'instruction VOLUME dans Dockerfile?
La vraie question que je veux résoudre est - comment monter des volumes hôtes dans des conteneurs Docker dans Dockerfile pendant la construction, c'est-à-dire avoir la docker run -v /export:/export
capacité pendant docker build
.
La raison derrière cela, pour moi, est lors de la construction de choses dans Docker, je ne veux pas que ces apt-get install
caches ( ) soient verrouillés dans un seul docker, mais pour les partager / réutiliser. C'est la principale raison pour laquelle je pose cette question.
Dernière mise à jour:
Avant Docker v18.09, la bonne réponse devrait être celle qui commence par:
Il existe un moyen de monter un volume pendant une génération, mais cela n'implique pas Dockerfiles.
Cependant, c'était une réponse mal formulée, organisée et appuyée. Lorsque j'ai réinstallé mon docker contient, je suis tombé sur l'article suivant:
Docker un service apt-cacher-ng
https://docs.docker.com/engine/examples/apt-cacher-ng/
C'est la solution du docker à cette / ma question, pas directement mais indirectement. C'est la manière orthodoxe que Docker nous propose de faire. Et j'avoue que c'est mieux que celui que j'essayais de demander ici.
Une autre façon est la nouvelle réponse acceptée , par exemple, le Buildkit dans la version 18.09.
Choisissez celui qui vous convient.
Était: Il y avait eu une solution - rocker, qui n'était pas de Docker, mais maintenant que le rocker est interrompu, je reviens à la réponse "Pas possible" .
Ancienne mise à jour: la réponse est donc "impossible". Je peux l'accepter comme réponse car je sais que le problème a été longuement discuté sur https://github.com/docker/docker/issues/3156 . Je peux comprendre que la portabilité est un problème primordial pour le développeur docker; mais en tant qu'utilisateur docker, je dois dire que je suis très déçu de cette fonctionnalité manquante. Permettez-moi de terminer mon argumentation par une citation de la discussion susmentionnée: " Je voudrais utiliser Gentoo comme image de base, mais je ne veux certainement pas que> 1 Go de données d'arborescence Portage soient dans l'une des couches une fois l'image créée. Vous pourrait avoir de jolis conteneurs compacts sans le gigantesque arbre de portage devant apparaître dans l'image lors de l'installation."Oui, je peux utiliser wget ou curl pour télécharger tout ce dont j'ai besoin, mais le fait qu'une simple considération de portabilité m'oblige maintenant à télécharger> 1 Go d'arborescence Portage chaque fois que je crée une image de base Gentoo n'est ni efficace ni convivial. de plus, le dépôt de paquets SERA TOUJOURS sous / usr / portage, donc TOUJOURS PORTABLE sous Gentoo. Encore une fois, je respecte la décision, mais permettez-moi d'exprimer ma déception également dans l'intervalle. Merci.
Question originale en détail:
De
Partager des répertoires via des volumes
http://docker.readthedocs.org/en/v0.7.3/use/working_with_volumes/
il indique que la fonctionnalité de volumes de données "est disponible depuis la version 1 de l'API Docker Remote". Mon docker est de la version 1.2.0, mais j'ai trouvé que l'exemple donné dans l'article ci-dessus ne fonctionnait pas:
# BUILD-USING: docker build -t data .
# RUN-USING: docker run -name DATA data
FROM busybox
VOLUME ["/var/volume1", "/var/volume2"]
CMD ["/usr/bin/true"]
Quelle est la bonne façon dans Dockerfile de monter des volumes montés sur l'hôte dans des conteneurs Docker, via la commande 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 discussion est assez approfondie, s'il y a un court moyen de résumer quelle est la raison?