Arbeiten mit Docker-Volumes

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab erfahren Sie, wie Sie Daten in Docker-Containern mithilfe von Volumes verwalten können. Docker-Volumes sind das bevorzugte Mittel, um Daten zu speichern, die von Docker-Containern erzeugt und verwendet werden. In diesem Lab werden Sie durch verschiedene Aspekte von Docker-Volumes geführt, einschließlich Erstellung, Verwaltung, Datenaustausch, Sicherung und Wiederherstellung. Am Ende dieses Labs werden Sie ein solides Verständnis davon haben, wie Sie Daten in Docker-Umgebungen effektiv verwalten können.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/run -.-> lab-389189{{"Arbeiten mit Docker-Volumes"}} docker/ls -.-> lab-389189{{"Arbeiten mit Docker-Volumes"}} docker/stop -.-> lab-389189{{"Arbeiten mit Docker-Volumes"}} docker/rm -.-> lab-389189{{"Arbeiten mit Docker-Volumes"}} docker/exec -.-> lab-389189{{"Arbeiten mit Docker-Volumes"}} docker/inspect -.-> lab-389189{{"Arbeiten mit Docker-Volumes"}} docker/volume -.-> lab-389189{{"Arbeiten mit Docker-Volumes"}} end

Grundlegendes zu Docker-Speicheroptionen

Bevor wir uns mit Docker-Volumes befassen, ist es wichtig, die verschiedenen Speicheroptionen in Docker zu verstehen. Docker bietet drei Hauptoptionen für die Datenspeicherung:

  1. Volumes: Das bevorzugte Mittel zur dauerhaften Speicherung von Daten in Docker.
  2. Bind mounts: Verbinden Sie einen bestimmten Pfad auf dem Host-System mit einem Container.
  3. tmpfs mounts: Speichern Sie Daten temporär im Arbeitsspeicher des Host-Systems.

In diesem Lab werden wir uns hauptsächlich auf Volumes konzentrieren, da sie die flexibelste und empfohlene Option für die Datenverwaltung in Docker sind.

Beginnen wir damit, die aktuellen Volumes auf Ihrem System aufzulisten:

docker volume ls

Sie werden eine Ausgabe ähnlich dieser sehen:

DRIVER    VOLUME NAME
local     jenkins-data

Dieser Befehl listet alle Docker-Volumes auf Ihrem System auf. Die Ausgabe zeigt den Volume-Treiber (normalerweise "local") und den Volumennamen. Möglicherweise sehen Sie einige vorhandene Volumes, oder die Liste ist leer, wenn Sie noch keine Volumes erstellt haben.

Machen Sie sich keine Sorgen, wenn Sie andere Volumennamen sehen oder gar keine Volumes. Dies ist normal und hängt davon ab, was Sie zuvor mit Docker auf Ihrem System getan haben.

Erstellen und Verwalten von benannten Volumes

Jetzt erstellen wir ein neues benanntes Volume. Ein benanntes Volume ist ein Volume, das Sie explizit erstellen und ihm einen bestimmten Namen geben. Dies erleichtert die spätere Referenzierung und Verwaltung.

Führen Sie diesen Befehl aus, um ein neues Volume zu erstellen:

docker volume create my_data

Dieser Befehl erstellt ein neues Volume mit dem Namen my_data. Docker kümmert sich um alle Details darüber, wo und wie dieses Volume auf Ihrem Host-System gespeichert wird.

Lassen Sie uns überprüfen, ob das Volume erstellt wurde:

docker volume ls

Sie sollten jetzt my_data in der Liste der Volumes sehen, zusammen mit allen Volumes, die bereits vorhanden waren.

Um detailliertere Informationen über das Volume zu erhalten, können wir den inspect-Befehl verwenden:

docker volume inspect my_data

Dies wird eine Ausgabe wie die folgende erzeugen:

[
  {
    "CreatedAt": "2024-08-22T14:31:09+08:00",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/my_data/_data",
    "Name": "my_data",
    "Options": {},
    "Scope": "local"
  }
]

Diese Ausgabe gibt uns mehrere Informationen über unser Volume:

  • Wann es erstellt wurde
  • Welchen Treiber es verwendet (in diesem Fall local)
  • Den Mountpoint (wo die Daten tatsächlich auf Ihrem Host-System gespeichert werden)
  • Den Namen, den wir ihm gegeben haben

Machen Sie sich keine Sorgen, wenn Sie jetzt nicht alle diese Details verstehen. Die wichtigsten Teile für uns sind der Name und der Mountpoint.

Verwenden von Volumes mit Containern

Jetzt, da wir ein Volume haben, verwenden wir es mit einem Container. Wir starten einen neuen Container und montieren unser Volume an ihn.

Führen Sie diesen Befehl aus:

docker run -d --name my_container -v my_data:/app/data ubuntu:latest sleep infinity

Lassen Sie uns diesen Befehl zerlegen:

  • docker run: Dies teilt Docker mit, einen neuen Container auszuführen.
  • -d: Dies führt den Container im detached-Modus (im Hintergrund) aus.
  • --name my_container: Dies gibt unserem Container einen Namen, was die spätere Referenzierung erleichtert.
  • -v my_data:/app/data: Dies montiert unser my_data-Volume an das Verzeichnis /app/data innerhalb des Containers.
  • ubuntu:latest: Dies ist das Image, das wir für unseren Container verwenden.
  • sleep infinity: Dies ist der Befehl, den der Container ausführen wird. Er lässt den Container einfach unendlich lange laufen.

Jetzt läuft unser Container mit dem montierten Volume. Lassen Sie uns einige Daten im Volume erstellen:

docker exec my_container sh -c "echo 'Hello from Docker volume' > /app/data/test.txt"

Dieser Befehl macht einige Dinge:

  • docker exec: Dies ermöglicht es uns, einen Befehl in einem laufenden Container auszuführen.
  • my_container: Dies ist der Name unseres Containers.
  • sh -c "...": Dies führt einen Shell-Befehl innerhalb des Containers aus.
  • Der eigentliche Befehl erstellt eine Datei namens test.txt in unserem Volume mit dem Inhalt "Hello from Docker volume".

Um zu überprüfen, ob die Daten geschrieben wurden, können wir die Datei lesen:

docker exec my_container cat /app/data/test.txt

Sie sollten die Nachricht "Hello from Docker volume" in der Konsole sehen.

Datenaustausch zwischen Containern

Einer der großen Vorteile von Docker-Volumes ist die Möglichkeit, Daten zwischen Containern zu teilen. Erstellen wir einen weiteren Container, der dasselbe Volume verwendet:

docker run -d --name another_container -v my_data:/app/shared_data ubuntu:latest sleep infinity

Dieser Befehl ähnelt stark dem, den wir zuvor verwendet haben, aber wir geben dem Container einen anderen Namen und montieren das Volume an einen anderen Pfad innerhalb des Containers.

Jetzt überprüfen wir, ob dieser neue Container auf die Daten zugreifen kann, die wir zuvor erstellt haben:

docker exec another_container cat /app/shared_data/test.txt

Sie sollten dieselbe Nachricht "Hello from Docker volume" sehen, die wir zuvor geschrieben haben. Dies zeigt, dass beide Container auf dieselben Daten zugreifen.

Fügen wir aus diesem neuen Container einige weitere Daten hinzu:

docker exec another_container sh -c "echo 'Data from another container' >> /app/shared_data/test.txt"

Dieser Befehl fügt eine neue Zeile in unsere test.txt-Datei hinzu.

Jetzt, wenn wir den Inhalt der Datei aus einem der beiden Container überprüfen, sollten wir beide Zeilen sehen:

docker exec my_container cat /app/data/test.txt

Sie sollten sowohl "Hello from Docker volume" als auch "Data from another container" in der Ausgabe sehen.

Dies zeigt, wie Docker-Volumes verwendet werden können, um Daten zwischen Containern zu teilen, was für viele Anwendungen unglaublich nützlich ist.

Sicherung und Wiederherstellung von Volumes

Das Sichern und Wiederherstellen von Docker-Volumes ist für den Datenschutz von entscheidender Bedeutung. Lassen Sie uns den Prozess durchgehen:

Zunächst müssen wir die Container stoppen und entfernen, die das Volume verwendet haben. Dies liegt daran, dass wir ein Volume nicht entfernen können, solange es in Verwendung ist:

docker stop my_container another_container
docker rm my_container another_container

Jetzt erstellen wir eine Sicherung unseres Volumes:

docker run --rm -v my_data:/source:ro -v $(pwd):/backup ubuntu tar cvf /backup/my_data_backup.tar -C /source.

Dieser Befehl mag komplex aussehen, also lassen Sie uns ihn zerlegen:

  • docker run --rm: Führen Sie einen temporären Container aus und entfernen Sie ihn, wenn er fertig ist.
  • -v my_data:/source:ro: Montieren Sie unser Volume im Container als schreibgeschützt.
  • -v $(pwd):/backup: Montieren Sie das aktuelle Verzeichnis als /backup im Container.
  • ubuntu: Verwenden Sie das Ubuntu-Image.
  • tar cvf /backup/my_data_backup.tar -C /source.: Erstellen Sie ein tar-Archiv der Volumedaten.

Jetzt entfernen wir unser ursprüngliches Volume:

docker volume rm my_data

Um die Daten wiederherzustellen, erstellen wir ein neues Volume und extrahieren die Sicherung darin:

docker volume create my_restored_data
docker run --rm -v my_restored_data:/dest -v $(pwd):/backup ubuntu bash -c "tar xvf /backup/my_data_backup.tar -C /dest"

Dies erstellt ein neues Volume und extrahiert unsere Sicherung darin.

Lassen Sie uns überprüfen, ob die Daten wiederhergestellt wurden:

docker run --rm -v my_restored_data:/app/data ubuntu cat /app/data/test.txt

Sie sollten den Inhalt der Datei sehen, die wir zuvor erstellt haben.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie mit Docker-Volumes arbeiten. Sie haben benannte Volumes erstellt und verwaltet, Volumes mit Containern verwendet, Daten zwischen Containern geteilt und Sicherungs- und Wiederherstellungsvorgänge durchgeführt. Diese Fähigkeiten sind für eine effektive Datenverwaltung in Docker-Umgebungen unerlässlich.

Wichtige Erkenntnisse:

  • Docker-Volumes bieten eine flexible und effiziente Möglichkeit, persistente Daten in Containern zu verwalten.
  • Volumes können einfach mit Docker CLI-Befehlen erstellt, inspiziert und entfernt werden.
  • Daten in Volumes können zwischen mehreren Containern geteilt werden.
  • Das Sichern und Wiederherstellen von Volumes ist für den Datenschutz von entscheidender Bedeutung und kann mit Standard-Linux-Befehlen erreicht werden.

Wenn Sie weiterhin mit Docker arbeiten, denken Sie daran, die Datenpersistenz und -verwaltung als einen wichtigen Aspekt Ihrer containerisierten Anwendungen zu berücksichtigen. Planen Sie immer die Datensicherung und -wiederherstellung, insbesondere in Produktionsumgebungen.