Dateien (und andere Daten), die in einem Docker-Container gespeichert sind, bleiben nicht bestehen, wenn der Container gelöscht wird. Um dies zu umgehen, verwendet Docker volumes und Reittiere binden kann verwendet werden. In diesem Leitfaden wird die Verwendung von Docker-Volumes als Möglichkeit zum Speichern persistenter Daten erläutert. Stellen Sie sich Volumes als eine externe Festplatte vor; Wenn die interne Festplatte gelöscht wird, behält die externe Festplatte immer noch ihre eigenen Daten. Volumes werden auf dem Host und unabhängig von Containern oder Images gespeichert. Sie können nach Bedarf in verschiedenen Containern gemountet werden, und da Volumes vom Image getrennt sind, erhöhen sie die Image-Größe nicht.
Bevor Sie beginnen
-
Wenn Sie dies noch nicht getan haben, erstellen Sie ein Linode-Konto und eine Compute-Instanz. Sehen Sie sich unsere Leitfäden Erste Schritte mit Linode und Erstellen einer Compute-Instanz an.
-
Folgen Sie unserem Leitfaden zum Einrichten und Sichern einer Compute-Instanz, um Ihr System zu aktualisieren. Möglicherweise möchten Sie auch die Zeitzone festlegen, Ihren Hostnamen konfigurieren, ein eingeschränktes Benutzerkonto erstellen und den SSH-Zugriff sichern.
-
Installieren Sie Docker auf Ihrem System.
-
In diesem Handbuch wird davon ausgegangen, dass Sie mit der Linux-Befehlszeile vertraut sind. Siehe Verwenden des Terminals.
-
In diesem Handbuch wird davon ausgegangen, dass Sie über ein grundlegendes Verständnis von Docker verfügen. Außerdem sollten Sie Docker bereits auf Ihrem Server installiert und ein Docker-Image bereitgestellt haben. Siehe Eine Einführung in Docker.
Erstellen eines Docker-Volumes
Um Docker-Volumes zu verstehen, benötigen Sie ein Volume, an dem Sie arbeiten können.
-
Melden Sie sich entweder über SSH oder Lish bei Ihrem Linode (oder einem anderen Linux-Server) an.
-
Erstellen Sie ein Volume, indem Sie den folgenden Befehl eingeben und dabei example_volume ersetzen mit dem Label für Ihr Volume.
docker volume create example_volume
-
Vergewissern Sie sich, dass das Volume erstellt wurde.
docker volume list
Die Ausgabe sollte so aussehen:
[[email protected] ~]$ docker volume list DRIVER VOLUME NAME local example_volume [[email protected] ~]$
Inspizieren eines Docker-Volumes
Wenn Sie weitere Details zu einem Volume anzeigen möchten, können Sie die docker volume inspect
verwenden Befehl:
docker volume inspect example_volume
Die Ausgabe sollte ungefähr so aussehen:
[[email protected] ~]$ docker volume inspect example_volume
[
{
"CreatedAt": "2021-05-19T15:27:27Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/example_volume/_data",
"Name": "example_volume",
"Options": {},
"Scope": "local"
}
]
[[email protected] ~]$
Mounten eines Docker-Volumes in einem Container
Damit die Daten eines Containers bestehen bleiben, müssen Sie ein Docker-Volume mit dem --mount flag
gemountet haben im docker run
Befehl. Ersetzen Sie [volume_name] durch den Namen Ihres Volumes, [Pfad] mit dem absoluten Pfad, in dem Sie das Volume innerhalb des Containers mounten möchten, und [docker_image] mit dem Namen Ihres Bildes.
docker run --mount source=[volume_name],destination=[path] [docker_image]
Als Beispiel mountet der folgende Befehl das Volume mit dem Namen example_volume in den Pfad /example_volume
innerhalb eines Containers mit ubuntu
Bild.
docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
Dieser Befehl führt das Image aus, stellt das Volume bereit und meldet den Benutzer als root auf dem Ubuntu-Image an. Sobald Sie als Root angemeldet sind, können Sie mit ls
überprüfen, ob das „example_volume“ gemountet ist . Die Ausgabe für all dies sollte in etwa so aussehen:
[[email protected] ~]$ docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
[email protected]:/# ls
bin dev example_volume lib lib64 media opt root sbin sys usr
boot etc home lib32 libx32 mnt proc run srv tmp var
[email protected]:/#
Kopieren und Freigeben von Dateien zwischen Containern
Docker-Volumes ermöglichen auch die gemeinsame Nutzung zwischen Containern.
-
Mounten Sie das Volume gemäß den Anweisungen unter Mounten eines Docker-Volumes in einem Container. Hier ist das zuvor verwendete Beispiel:
docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
-
Ändern Sie das Verzeichnis in
example_data
Verzeichnis.cd example_data
-
Erstellen Sie eine Testdatei im Volume, indem Sie den folgenden
touch
eingeben Befehl.touch example_file.txt
-
Verlassen Sie dann den Container.
exit
-
Führen Sie nun ein weiteres Docker-Image mit demselben gemounteten Volume aus. Der
debian
image wird im Beispiel unten verwendet.docker run -it --name=example_2 --mount source=example_volume,destination=/example_volume debian
-
Navigieren Sie im neuen Container (mit dem Namen „example_2“, wenn Sie einen ähnlichen Befehl wie oben verwenden) zum Verzeichnis des Volumes.
cd example_volume
-
Geben Sie
ls
ein um die Datei zu sehen.ls
Mounten eines Verzeichnisses von Ihrem Linode in einen Container
Anstatt ein neues Volume zu erstellen, können Sie auch ein Verzeichnis von Ihrem Linode (oder einem anderen System) in einen Docker-Container mounten. Dies wird durch Bind-Mounts erreicht und ist hilfreich, wenn Sie die Dateien Ihres Containers direkt von Ihrem System aus speichern und darauf zugreifen möchten. Im Vergleich zu Volumes haben Bind-Mounts eine eingeschränkte Funktionalität.
-
Melden Sie sich entweder über SSH oder Lish bei Ihrem Linode (oder einem anderen Linux-Server) an.
-
Verwenden Sie den folgenden Befehl, um Docker auszuführen, und ersetzen Sie dabei [local-directory] mit dem absoluten Pfad zu dem Verzeichnis in Ihrem Linode, das Sie einhängen möchten (verwenden Sie
$(pwd)
um das aktuelle Verzeichnis zu mounten). Ersetzen Sie dann [Mount-Verzeichnis] mit dem absoluten Pfad auf Ihrem Container, wo Sie auf die lokalen Dateien zugreifen möchten, und ersetzen Sie [image] mit dem Docker-Image, das Sie verwenden möchten.docker run --rm -it -v [local-directory]:[mount-directory] [image]
-
Sie werden automatisch am Container angemeldet. Navigieren Sie zu Ihrem Mount-Verzeichnis und sehen Sie sich die Dateien an.
ls
Sie sollten alle Dateien sehen, die Sie im lokalen Verzeichnis gespeichert haben.
Weiterführende Literatur
Docker-Volumes haben noch viel mehr zu bieten, als wir hier eingehen können, und jeder Anwendungsfall wird anders sein. Zwei großartige Orte, um mehr darüber zu erfahren, befinden sich jedoch auf der Website von Docker's Docs selbst:
-
Volumes bei Docker Docs verwenden
-
Beheben Sie Volume-Fehler in Docker Docs
Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.
- Volumes bei Docker Docs verwenden
- Volumefehler in Docker Docs beheben