GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Docker-Volumes verstehen

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

  1. 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.

  2. 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.

  3. Installieren Sie Docker auf Ihrem System.

  4. In diesem Handbuch wird davon ausgegangen, dass Sie mit der Linux-Befehlszeile vertraut sind. Siehe Verwenden des Terminals.

  5. 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.

  1. Melden Sie sich entweder über SSH oder Lish bei Ihrem Linode (oder einem anderen Linux-Server) an.

  2. 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
    
  3. 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.

  1. 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
    
  2. Ändern Sie das Verzeichnis in example_data Verzeichnis.

    cd example_data
    
  3. Erstellen Sie eine Testdatei im Volume, indem Sie den folgenden touch eingeben Befehl.

    touch example_file.txt
    
  4. Verlassen Sie dann den Container.

    exit
    
  5. 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
    
  6. 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
    
  7. 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.

  1. Melden Sie sich entweder über SSH oder Lish bei Ihrem Linode (oder einem anderen Linux-Server) an.

  2. 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]
    
  3. 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

Docker
  1. Logische Volumes unter Linux mit LVM erstellen

  2. So teilen Sie Daten zwischen Docker-Containern unter Ubuntu 22.04

  3. Docker

  4. Einführung in Docker

  5. Verstehen des Besitzes von Benutzerdateien in Docker:wie man das Ändern von Berechtigungen von verknüpften Volumes vermeidet

Erläuterung von Docker-Volumes mit Beispielen

Verwaltung logischer Volumes unter Linux erklärt

So fügen Sie einem vorhandenen Docker-Container ein Volume hinzu

So führen Sie Jenkins in Docker mit Docker Compose with Volumes aus

So greifen Sie auf Dateien außerhalb eines Docker-Containers zu

20 nützliche Beispiele für Docker-Volume-Befehle für moderne Entwickler