Ursprüngliche Frage: Wie verwende ich die VOLUME-Anweisung in Dockerfile?
Die eigentliche Frage , die ich lösen will , ist - wie Host - Volumes in Docker - Container in Dockerfile während Build zu montieren, dh die mit docker run -v /export:/export
währender Fähigkeit docker build
.
Der Grund dafür ist für mich, dass ich beim Erstellen von Dingen in Docker nicht möchte, dass diese ( apt-get install
) Caches in einem einzigen Docker gesperrt sind, sondern dass sie freigegeben / wiederverwendet werden. Das ist der Hauptgrund, warum ich zu dieser Frage frage.
Neuestes Update:
Vor Docker v18.09 sollte die richtige Antwort folgende sein:
Es gibt eine Möglichkeit, ein Volume während eines Builds bereitzustellen, jedoch ohne Docker-Dateien.
Dies war jedoch eine schlecht formulierte, organisierte und unterstützte Antwort. Bei der Neuinstallation meines Docker-Inhalts bin ich auf folgenden Artikel gestoßen:
Dockerisieren Sie einen apt-cacher-ng-Dienst
https://docs.docker.com/engine/examples/apt-cacher-ng/
Das ist die Lösung des Dockers für diese / meine Frage, nicht direkt, sondern indirekt. Es ist die orthodoxe Art, wie Docker uns vorschlägt. Und ich gebe zu, es ist besser als das, was ich hier fragen wollte.
Ein anderer Weg ist die neu akzeptierte Antwort , z. B. das Buildkit in Version 18.09.
Wählen Sie, was zu Ihnen passt.
War: Es gab eine Lösung - Rocker, der nicht von Docker stammte, aber jetzt, da der Rocker eingestellt wird, setze ich die Antwort wieder auf "Nicht möglich" zurück.
Altes Update: Die Antwort lautet also "Nicht möglich". Ich kann es als Antwort akzeptieren, da ich weiß, dass das Problem unter https://github.com/docker/docker/issues/3156 ausführlich besprochen wurde . Ich kann verstehen, dass Portabilität für Docker-Entwickler von größter Bedeutung ist. Aber als Docker-Benutzer muss ich sagen, dass ich über diese fehlende Funktion sehr enttäuscht bin. Lassen Sie mich mein Argument mit einem Zitat aus der oben genannten Diskussion schließen: " Ich möchte Gentoo als Basis-Image verwenden, möchte aber definitiv nicht, dass sich> 1 GB Portage-Baumdaten in einer der Ebenen befinden, sobald das Image erstellt wurde. Sie könnte einige schöne, kompakte Container haben, wenn nicht der gigantische Portage-Baum während der Installation im Image erscheinen müsste."Ja, ich kann wget oder curl verwenden, um alles herunterzuladen, was ich brauche, aber die Tatsache, dass ich aufgrund einer Portabilitätsüberlegung jetzt gezwungen bin, jedes Mal, wenn ich ein Gentoo-Basis-Image erstelle,> 1 GB Portage-Baum herunterzuladen, ist weder effizient noch benutzerfreundlich Darüber hinaus befindet sich das Paket-Repository IMMER unter / usr / portage und ist daher unter Gentoo IMMER TRAGBAR. Auch hier respektiere ich die Entscheidung, aber bitte erlauben Sie mir, in der Zwischenzeit auch meine Enttäuschung auszudrücken. Danke.
Ursprüngliche Frage im Detail:
Von
Freigeben von Verzeichnissen über Volumes
http://docker.readthedocs.org/en/v0.7.3/use/working_with_volumes/
Es heißt, dass die Datenvolumenfunktion "seit Version 1 der Docker Remote-API verfügbar ist". Mein Docker ist von Version 1.2.0, aber ich habe festgestellt, dass das im obigen Artikel angegebene Beispiel nicht funktioniert:
# BUILD-USING: docker build -t data .
# RUN-USING: docker run -name DATA data
FROM busybox
VOLUME ["/var/volume1", "/var/volume2"]
CMD ["/usr/bin/true"]
Wie kann in Dockerfile Host-gemountete Volumes über den Befehl VOLUME ordnungsgemäß in Docker-Container eingebunden werden?
$ 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
. Die Diskussion ist ziemlich umfangreich, gibt es eine kurze Möglichkeit, um zusammenzufassen, was der Grund ist?