Docker-Mount-Volumes auf dem Host
Habe ich erfolgreich bei der Freigabe von Ordnern zwischen einem docker-container mit einem Volumen über
docker run -v /host/path:/container/path ...
Aber meine Frage ist was der Unterschied zwischen diesem und mit der VOLUME
Befehl im Dockerfile
VOLUME /path
Ich bin mit einem Bild, dass eine VOLUME
Befehl, und ich würde gerne wissen, wie es mit meinem host. Ich habe es getan mit der -v
Befehl oben, aber ich wusste nicht, ob ich brauchte sowohl die -v
und VOLUME
.
InformationsquelleAutor der Frage Jeff Storey | 2014-08-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
VOLUME
Befehl mount ein Verzeichnis in Ihrem container und speichern Sie alle Dateien, die erstellt oder bearbeitet in diesem Verzeichnis auf Ihren Rechnern Festplatte außerhalb der container-Datei-Struktur, unter Umgehung der union-Dateisystem.Die Idee ist, dass Ihre Datenträger gemeinsam genutzt werden können, Ihre docker-Container, und Sie werden bleiben, solange es ein container (läuft oder gestoppt), die Sie verweist.
Können Sie andere Behälter montieren bestehenden Volumen (effektiv den Austausch zwischen den Behältern) durch die Verwendung der
--volumes-from
Befehl beim ausführen eines Containers.Den grundlegenden Unterschied zwischen
VOLUME
und-v
ist diese:-v
Montage vorhandene Dateien von Ihrem Betriebssystem in Ihrem docker-container undVOLUME
wird erstellen Sie eine neue leere volume auf Ihrem host und montieren es in Ihrem container.Beispiel:
VOLUME /var/lib/mysql
.some-volume
Dann,
docker run --volumes-from some-volume docker-image-name:tag
some-volume
montiert/var/lib/mysql
Hinweis: die Verwendung
--volumes-from
montieren Sie die Lautstärke auf, was vorhanden ist in der Lage die Lautstärke. I. e., wenn Sie hatte die Sachen in/var/lib/mysql
es wird ersetzt durch den Inhalt des Datenträgers.InformationsquelleAutor der Antwort Chris McKinnel
Lassen Sie mich hinzufügen, meine Antwort, weil ich glaube, die anderen sind fehlt der Punkt, Andockfenster.
Mit
VOLUME
im Dockerfile ist der Richtige Weg,™, denn Sie lassen Andockfenster wissen, dass ein bestimmtes Verzeichnis enthält permanente Daten. Docker erstellt ein volume für diese Daten und löschen Sie niemals, auch wenn Sie entfernen Sie alle Behälter, die Sie verwenden.Es umgeht auch die union-Dateisystem, so dass das Volumen ist in der Tat ein Tatsächliches Verzeichnis, das gemountet wird (read-write oder Read) an der richtigen Stelle in die Behälter, teilen Sie es.
Nun, um Zugriff auf die Daten vom host, Sie müssen nur überprüfen Sie Ihre container:
Was ich normalerweise tun ist machen symlinks in standard -, wie z.B. /srv, so dass ich leicht Zugang zu den volumes und verwalten die Daten, die Sie enthalten (nur für die Mengen, die Sie interessieren):
InformationsquelleAutor der Antwort Tobia
Grundsätzlich
VOLUME
und-v
option sind fast gleich. Diese bedeuten: "mount-spezifischen Verzeichnis auf Ihrem container'. Zum BeispielVOLUME /data
und-v /data
ist genau dieselbe Bedeutung. Wenn Sie das Bild habenVOLUME /data
oder mit-v /data
option/data
Verzeichnis gemountet ist dein container. Dieses Verzeichnis gehört nicht zu Ihrem container.Vorstellen, dass Sie fügen Sie einige Dateien, um
/data
auf den container, dann Begehen die container in neues Bild. Es gibt keine Dateien auf Daten-Verzeichnis, da montiert/data
Verzeichnis ist, gehören zu den ursprünglichen container.Diese montiert Verzeichnis wie
/data
wird verwendet, um Daten zu speichern, die nicht gehören zu Ihrer Anwendung. Und Sie können vordefinieren Verzeichnis für die Daten, die gehören nicht auf die container mitVOLUME
.Einen Unterschied zwischen
Volume
und-v
option, die Sie verwenden können-v
option dynamisch auf das starten der container. Es bedeutet, Sie können mount ein Verzeichnis dynamisch. Und ein weiterer Unterschied ist, dass Sie können montieren Sie Ihre host-Verzeichnis in Ihrem container mit-v
InformationsquelleAutor der Antwort nacyot
VOLUME wird verwendet in
Dockerfile
machen, dass das volume für die Verwendung von anderen Behältnissen. B. erstellen SieDockerfile
:VOM ubuntu:14.04
bauen das Bild:
$ docker build -t testing_volume .
Laufen die container, sagen container1:
$ docker run -it <image-id of above image> bash
Führen Sie nun einen anderen Behälter mit Volumen-aus-option (sagen-container2)
$ docker run -it --volumes-from <id-of-above-container> ubuntu:14.04 bash
Bekommen Sie alle Daten aus container1
/myvol
- Verzeichnis in container2 am gleichen Ort.-v
option ist gegeben bei Laufzeit von container, die verwendet wird, um mount-Containers Verzeichnis auf dem host. Es ist einfach zu bedienen, geben Sie einfach-v
option mit argument als<host-path>:<container-path>
. Der ganze Befehl kann als$ docker run -v <host-path>:<container-path> <image-id>
InformationsquelleAutor der Antwort Yogesh Jilhawar
Dies ist aus der Docker Dokumentation selbst können vielleicht helfen, einfach und schlicht:
"Host-Verzeichnis ist, durch seine Natur, host-abhängig. Aus diesem Grund können Sie nicht mounten ein host-Verzeichnis von Dockerfile, das VOLUMEN Anweisung unterstützt keine übergabe einer host-dir, weil gebaut Bilder sollten tragbar sein. Ein host-Verzeichnis wäre nicht verfügbar auf allen Gastgebern.".
InformationsquelleAutor der Antwort Vennesa