web-dev-qa-db-de.com

Was ist der Zweck von VOLUME in Dockerfile?

Ich versuche, das Volumen von Docker besser zu verstehen, und es fällt mir schwer, die Unterschiede/Anwendungsfälle von:

  • Der Befehl docker volume create
  • Der docker run -v /path:/Host_path
  • Der Eintrag VOLUME in der Datei Dockerfile

Insbesondere verstehe ich nicht, was passiert, wenn Sie den Eintrag VOLUME mit dem Flag -v Kombinieren.

Wenn jemand gut verstanden hat, bitte erkläre es mir!

70
radium226

Ein Volume ist eine persistente Daten gespeichert in /var/lib/docker/volumes/...

  • Sie können es entweder in einer Docker-Datei deklarieren, dh jedes Mal, wenn ein Container aus dem Image heraus gestartet wird, wird das Volume erstellt ( leer ), auch wenn Sie Ich habe keine -v Option.

  • Sie können es zur Laufzeit deklarieren docker run -v [Host-dir:]container-dir .
    Das Kombinieren der beiden (VOLUME + docker run -v) bedeutet, dass Sie den Inhalt eines Host-Ordners in Ihr Volume mounten können, das vom Container in /var/lib/docker/volumes/... beibehalten wird.

  • 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 es anderen Containern schnell zu ermöglichen, das Volumen aufzunehmen.

Wenn Sie einige Inhalte in einem Volume beibehalten haben, den Container jedoch seitdem gelöscht haben (der standardmäßig nicht das zugehörige Volume löscht, sofern Sie nicht docker rm -v verwenden), 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 gebunden ist? ".
Mit der Andock-Volume-Erstellung können Sie ein benanntes Volume auf einfache Weise wieder einem Container zuordnen.

docker volume create --name aname
docker run -v aname:/apath --name acontainer
...
# modify data in /apath
...
docker rm acontainer

# let's mount aname volume again
docker run -v aname:/apath --name acontainer
ls /apath
# you find your data back!
49
VonC