Ich versuche, mein Verständnis von Dockers Volumen zu vertiefen, und es fällt mir schwer, die Unterschiede / den Anwendungsfall von:
- Der
docker volume create
Befehl - Das
docker run -v /path:/host_path
- Der
VOLUME
Eintrag in derDockerfile
Datei
Ich verstehe besonders nicht, was passiert, wenn Sie den VOLUME
Eintrag mit der -v
Flagge kombinieren .
Antworten:
Ein Volume besteht aus persistenten Daten, die in gespeichert sind
/var/lib/docker/volumes/...
Sie können es entweder in einer Docker-Datei deklarieren. Dies bedeutet, dass jedes Mal, wenn ein Container aus dem Image gestartet wird, das Volume erstellt wird ( leer ), auch wenn Sie keine
-v
Option haben.Sie können es zur Laufzeit deklarieren
docker run -v [host-dir:]container-dir
.Durch die Kombination der beiden (
VOLUME
+docker run -v
) können Sie den Inhalt eines Hostordners in Ihr Volume einbinden, das vom Container in beibehalten wird/var/lib/docker/volumes/...
Docker-Volume erstellen erstellt ein Volume, ohne eine Docker-Datei definieren und ein Image erstellen und einen Container ausführen zu müssen. Es wird verwendet, um anderen Behältern schnell zu ermöglichen, das Volumen zu montieren.
Wenn Sie einige Inhalte in einem Volume beibehalten haben, aber seitdem den Container gelöscht haben (der das zugehörige Volume standardmäßig nicht löscht, es sei denn, Sie verwenden Docker rm -v), können Sie das Volume erneut an einen neuen Container anhängen (deklarieren) das gleiche Volumen).
Siehe " Docker - Zugriff auf ein Volume, das nicht an einen Container angehängt ist? ".
Mit Docker-Volume erstellen können Sie ein benanntes Volume einfach wieder an einen Container anhängen.
quelle
Dockerfile
mitVOLUME
und die-v /path:/host_path/
Flagge. Der Inhalt desVOLUME
wird durch den Inhalt von/host_path/
?docker volume create --name my_volume
gefolgt von adocker run --volume-from my_volume
machst, woher weißt du, wo der Mountpoint sein wird?docker run ...
wie kann ich innerhalb des laufenden Containers in eine Datei schreiben, die auf demmy_volume
Volume gespeichert ist ? Ich kenne den ... Weg nicht? des Volumens in meinem laufenden Container, weil ich nichts definiert habe? Ich hoffe, ich bin klar genug, weil ich definitiv nicht sicher bin, was ich sagen kann: - /docker volume create --name aname
erstellt ein benanntes Volume: Sie weisen zur Laufzeit einen Containerpfaddocker run -v aname:/apath
zu :: An diesen Container ist jetzt ein Volume angehängt, das in seinem Ordner / apath bereitgestellt ist. Ich habe die Antwort umgeschrieben, um dies klar zu machen.VOLUME
Die Anweisung wird interessant, wenn Sie sie mit demvolumes-from
Laufzeitparameter kombinieren .Angesichts der folgenden Docker-Datei:
Erstellen Sie ein Bild mit:
Und drehen Sie einen Behälter mit:
Das erste, was Sie bemerken müssen, ist, dass Sie in diesem Bild einen Ordner mit dem Namen haben
myvolume
. Dies ist jedoch nicht besonders interessant, da beim Verlassen des Containers auch das Volumen entfernt wird.Erstellen Sie eine leere Datei in diesem Ordner. Führen Sie daher im Container Folgendes aus:
Drehen Sie nun einen neuen Container hoch, teilen Sie jedoch das gleiche Volumen mit
my-first-bb
:Sie werden sehen, dass
my-second-bb
die Dateihello.txt
immyvolume
Ordner enthält.Sobald Sie beide Container verlassen, wird auch Ihr Volume entfernt.
quelle
--rm
Option gestartet haben . Ich denke, es könnte funktionieren, es zu erwähnen. Wenn Sie nicht gestartet werden , einen Behälter mit--rm
entfernen, können Sie immer noch Container und seine anonymen Bände mitdocker rm -v my-container
.