2016-01-15 11 views
28

Ich versuche, tiefer in meinem Verständnis von Docker Lautstärke zu gehen, und ich habe eine harte Zeit, die Unterschiede/Anwendungsfall von herauszufinden:Was den Zweck der VOLUME in Dockerfile ist

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

ich besonders nicht verstehen, was passiert, wenn man zusammen mbine den VOLUME Eintrag mit der -v Flagge.

Wenn jemand gut verstanden, bitte erklären Sie mich!

Antwort

23

wird ein Volumen einer persistenten in /var/lib/docker/volumes/...

gespeicherten Daten
  • Sie entweder in einem Dockerfile erklären kann, die jedes Mal ein Behälter aus dem Bild angegeben wird, wird das Volumen erstellt (leer) , auch wenn Sie keine -v Option haben.

  • Sie können es zur Laufzeit docker run -v [host-dir:]container-dir deklarieren.
    die Kombination der beiden (VOLUME + docker run -v) bedeutet, dass Sie den Inhalt eines Host-Ordner in Ihrem Volumen durch den Behälter in /var/lib/docker/volumes/... beharrte mounten kann

  • docker volume create ein Volumen schafft, ohne eine Dockerfile zu definieren und ein Bild mit bauen und führe einen Container aus. Es wird verwendet, um anderen Containern schnell zu ermöglichen, das Volume zu mounten.

Wenn Sie einige Inhalte in einem Volumen beibehalten hatte, aber seitdem löschte den Behälter (standardmäßig nicht seinem zugehörigen Datenträger gelöscht, es sei denn, Sie Docker rm -v verwenden), können Sie das wieder befestigen Volume in einen neuen Container (deklariert das gleiche Volumen).

Siehe "Docker - How to access a volume not attached to a container?".
Mit Docker Volume erstellen, ist es einfach, ein benanntes Volume an einen Container wieder anzuhängen.

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! 
+1

Angenommen, Sie verwenden ein 'Dockerfile' mit' VOLUME' und dem '-v/Pfad:/host_path /' Flag. Der Inhalt von 'VOLUME' wird durch den Inhalt von'/host_path/'überschrieben. – radium226

+0

@ radium226 ja. – VonC

+0

Dank dir @VonC, denke ich, bekomme ich es :) Und wenn du ein 'docker volume erstellst --name my_volume' gefolgt von einem' docker run --volume-from my_volume', woher weißt du wo der Mountpoint ist Sein? – radium226