2014-06-22 15 views
15

Nehmen Sie ein typischen Daten nur Behälter Docker:Wie funktionieren Dockercontainer-Volumes auch, wenn sie nicht ausgeführt werden?

FROM stackbrew/busybox:latest 

RUN mkdir /data 
VOLUME /data 

Jetzt habe ich viel von ihnen gesehen, die wie folgt ausgeführt werden:

docker run -name my-data data true

Die true Befehl beendet, sobald es läuft und so auch der Container. Aber überraschenderweise dient es weiterhin dem Volume, wenn Sie es über --volumes-from my-data mit einem anderen Container verbinden.

Meine Frage ist, wie funktioniert das? Wie erlaubt ein gestoppter Container den Zugriff auf seine Volumes?

Antwort

35

Volumes in Docker sind keine Top-Level-Sache. Sie sind "einfach" Teil der Meta-Daten eines Containers.

Wenn Sie VOLUME in Ihrem dockerfile haben oder einen Container beginnen mit -v, Dockarbeiter wird ein Verzeichnis in /var/lib/docker/volumes * mit einem zufälligen ID erstellen (dies genau dem gleichen Verfahren ist ein Bild mit commit wie dem Erstellen außer es ist leer) und füge diese zufällige ID zu den Metadaten des Containers.

Wenn der Container gestartet wird, bindet Docker das Verzeichnis /var/lib/docker/volumes/ * an der angegebenen Position für dieses Volume ein.

Wenn Sie volumes-from verwenden, sucht Docker nur die Datenträger-ID und den Speicherort von einem anderen Container, ausgeführt wird oder nicht, und mount-bind das Verzeichnis am festgelegten Speicherort.

Volumes sind nicht mit der Laufzeit verknüpft, es sind nur Verzeichnisse, die bereitgestellt werden.

* Bei neueren Versionen, Dockarbeiter nutzt nun die vfs Treiber für die Lagerung und /var/lib/docker/volumes/ verwendet wird, nur für Metadaten wie Größe, Erstellungszeit, usw. Die aktuellen Daten werden in /var/lib/docker/vfs/dir/<volume id>

+0

Ausgezeichnete Antwort gespeichert! Das macht jetzt Sinn. Vielen Dank :) – MHK

Verwandte Themen