Die VOLUME
Anweisung erstellt zur Laufzeit ein Datenvolumen in Ihrem Docker-Container. Das als Argument angegebene VOLUME
Verzeichnis ist ein Verzeichnis, das das Union-Dateisystem umgeht und hauptsächlich für persistente und gemeinsam genutzte Daten verwendet wird.
Wenn Sie ausführen docker inspect <your-container>
, sehen Sie unter dem Mounts
Abschnitt einen, Source
der den Verzeichnisspeicherort auf dem Host darstellt, und einen, Destination
der den gemounteten Verzeichnisspeicherort im Container darstellt. Beispielsweise,
"Mounts": [
{
"Name": "fac362...80535",
"Source": "/var/lib/docker/volumes/fac362...80535/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
Hier sind 3 Anwendungsfälle für docker run -v
:
docker run -v /data
: Dies entspricht der Angabe der VOLUME
Anweisung in Ihrer Docker-Datei.
docker run -v $host_path:$container_path
: Auf diese Weise können Sie zur Laufzeit $host_path
von Ihrem Host $container_path
in Ihren Container mounten . In der Entwicklung ist dies nützlich, um den Quellcode auf Ihrem Host für den Container freizugeben. In der Produktion kann dies verwendet werden, um Dinge wie die DNS-Informationen des Hosts (in /etc/resolv.conf
) oder Geheimnisse in den Container zu mounten . Umgekehrt können Sie diese Technik auch verwenden, um die Protokolle des Containers in bestimmte Ordner auf dem Host zu schreiben. Beides $host_path
und $container_path
müssen absolute Pfade sein.
docker run -v my_volume:$container_path
: Dadurch wird ein Datenvolumen in Ihrem Container unter erstellt $container_path
und benannt my_volume
. Dies entspricht im Wesentlichen dem Erstellen und Benennen eines Volumes mit docker volume create my_volume
. Das Benennen eines solchen Volumes ist nützlich für ein Container-Daten-Volume und ein Shared-Storage-Volume mithilfe eines Multi-Host-Speichertreibers wie Flocker .
Beachten Sie, dass der Ansatz zum Mounten eines Hostordners als Datenvolume in Dockerfile nicht verfügbar ist. Um die Docker-Dokumentation zu zitieren ,
Hinweis: Dies ist in einer Docker-Datei aufgrund der Portabilität und des Freigabezwecks nicht verfügbar. Da das Host-Verzeichnis naturgemäß hostabhängig ist, würde ein in einer Docker-Datei angegebenes Host-Verzeichnis wahrscheinlich nicht auf allen Hosts funktionieren.
Wenn Sie jetzt Ihre Dateien in Container in Nicht-Entwicklungsumgebungen kopieren möchten, können Sie die Anweisungen ADD
oder COPY
in Ihrer Docker-Datei verwenden. Diese verwende ich normalerweise für die Bereitstellung außerhalb der Entwicklung.
COPY
zuADD
. Sie sind fast gleich,ADD
verfügen jedoch über einige zusätzliche Funktionen für URLs und Archivdateien, die überraschend sein können.