Docker-Volumenverwaltung

DockerDockerBeginner
Jetzt üben

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

Einführung

In diesem Abschnitt wird die Verwendung von persistenten Datenspeichern in einer Docker-Umgebung, den sogenannten Volumes, behandelt. Sie werden die Eigenschaften persistenter Datenspeicher kennenlernen, wie z. B. den Unterschied zwischen internen und externen Volumes und wie und wann Sie sie verwenden sollen.


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/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/VolumeOperationsGroup -.-> docker/cp("Copy Data Between Host and Container") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/run -.-> lab-7769{{"Docker-Volumenverwaltung"}} docker/ls -.-> lab-7769{{"Docker-Volumenverwaltung"}} docker/exec -.-> lab-7769{{"Docker-Volumenverwaltung"}} docker/inspect -.-> lab-7769{{"Docker-Volumenverwaltung"}} docker/create -.-> lab-7769{{"Docker-Volumenverwaltung"}} docker/cp -.-> lab-7769{{"Docker-Volumenverwaltung"}} docker/volume -.-> lab-7769{{"Docker-Volumenverwaltung"}} end

Datenspeicherverwaltung

Datenspeicher sind eine Standardoperation für die Datenpersistenz in Docker, und in diesem Abschnitt werde ich Ihnen die Standardoperationen mit Datenspeichern in der Praxis vorführen.

Ziel

Ihr Ziel ist es, einen Datenspeicher namens my-vol mit dem Befehl docker zu erstellen und eine Datei namens test.txt in seinen Speicher hinzuzufügen.

Ergebnisbeispiel

Hier ist ein Beispiel dessen, was Sie am Ende dieser Herausforderung erreichen sollten:

  1. Erstellen eines Datenspeichers namens my-vol.
labex:~/ $ docker volume ls
DRIVER    VOLUME NAME
local     jenkins-data
local     minikube
local     my-vol
  1. Abrufen des Mountpoints anhand der Datenspeicherdetails.
[
  {
    "CreatedAt": "2024-01-20T17:37:33+08:00",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
    "Name": "my-vol",
    "Options": {},
    "Scope": "local"
  }
]
  1. Wechseln Sie in den Mountpoint und erstellen Sie die Datei test.txt.
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## pwd
/var/lib/docker/volumes/my-vol/_data
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## ls
test.txt

Anforderungen

Um diese Herausforderung zu bestehen, benötigen Sie Folgendes:

  • Kenntnisse über das Erstellen eines Datenspeichers mit dem Befehl docker.
  • Erstellen einer Datei als root-Benutzer.
  • Wechseln Sie als root-Benutzer mit sudo su und legen Sie das Passwort für den Benutzer root mit sudo passwd root fest.
✨ Lösung prüfen und üben

Erstellen von Containern mit Datenspeicher

In diesem Abschnitt werden wir Container mit Docker-Datenspeichern erstellen und dann Dateien kopieren.

Ziel

Ihr Ziel ist es, einen Docker-Volumen namens nginx-vol zu erstellen, dann einen Container namens nginx zu starten und ihn zu mounten und schließlich eine lokale index.html-Datei zu erstellen und in den nginx-Container zu kopieren.

Ergebnisbeispiel

Hier ist ein Beispiel dessen, was Sie am Ende dieser Herausforderung erreichen sollten:

  1. Erstellen eines Datenspeichers namens nginx-vol.
labex:~/ $ docker volume ls
DRIVER    VOLUME NAME
local     jenkins-data
local     minikube
local     my-vol
local     nginx-vol
  1. Erstellen eines Containers namens nginx auf der Grundlage des nginx-Images, der sein Verzeichnis /usr/share/nginx/html an das Datenspeicher-Volumen nginx-vol mountet.
labex:~/ $ docker ps | grep nginx
c39296aaf39e   nginx     "/docker-entrypoint.…"   35 seconds ago   Up 31 seconds   80/tcp    nginx
  1. Erstellen einer lokalen index.html-Datei mit dem Inhalt hello world im Verzeichnis /tmp.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
  1. Kopieren der lokalen index.html-Datei in den nginx-Container.
labex:/tmp/ $ docker exec nginx cat /usr/share/nginx/html/index.html
hello world

Anforderungen

Um diese Herausforderung zu bestehen, benötigen Sie Folgendes:

  • Kenntnisse über das Erstellen eines Datenspeichers mit dem Befehl docker.
  • Kenntnisse über das Starten eines Containers.
  • Kenntnisse über das Kopieren lokaler Dateien in Container.
✨ Lösung prüfen und üben

Erstellen von Containern mit Host-Pfad

In vielen Fällen sind wir nicht an Datenspeicher gewöhnt, sondern verwenden stattdessen das native Verzeichnis direkt für die Datenpersistenz. In diesem Abschnitt werden wir das native Verzeichnis verwenden, um Container zu erstellen.

Ziel

Ihr Ziel ist es, einen Container zu erstellen, der Host-Pfad verwendet, dann die lokalen Dateien in den Container zu kopieren und zu überprüfen, ob die Dateien in diesem Container die gleichen sind wie die in Host-Pfad.

Ergebnisbeispiel

Hier ist ein Beispiel dessen, was Sie am Ende dieser Herausforderung erreichen sollten:

  1. Erstellen eines nginx-Verzeichnisses im Verzeichnis /tmp.
labex:/tmp/ $ ls | grep nginx
nginx
  1. Starten des nginx-host-Containers auf der Grundlage des nginx-Images, der das Verzeichnis /tmp/nginx an das Verzeichnis /usr/share/nginx/html im Container mountet.
labex:/tmp/ $ docker ps | grep nginx-host
6fc2d40e12df   nginx     "/docker-entrypoint.…"   44 seconds ago   Up 43 seconds   80/tcp    nginx-host
  1. Überprüfen der spezifischen Mountdetails mit dem Befehl docker inspect.
"Mounts": [
   {
         "Type": "bind",
         "Source": "/tmp/nginx",
         "Destination": "/usr/share/nginx/html",
         "Mode": "",
         "RW": true,
         "Propagation": "rprivate"
   }
],
  1. Erstellen einer lokalen Datei namens nginx.txt mit dem Inhalt hello nginx.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
  1. Kopieren der nginx.txt-Datei in das Verzeichnis /usr/share/nginx/html des nginx-host-Containers.
labex:nginx/ $ docker exec nginx-host cat /usr/share/nginx/html/nginx.txt
hello nginx
  1. Überprüfen des Verzeichnisses /tmp/nginx auf dem lokalen Computer, um zu sehen, ob eine nginx.txt-Datei vorhanden ist.
labex:nginx/ $ pwd
/tmp/nginx
labex:nginx/ $ cat nginx.txt
hello nginx

Anforderungen

Um diese Herausforderung zu bestehen, benötigen Sie Folgendes:

  • Kenntnis des Host-Pfads, den Sie verwenden möchten.
  • Kenntnisse über die Verwendung einiger relevanter Befehle innerhalb des Containers, um zu überprüfen, ob das Hostverzeichnis oder die Datei zugegriffen werden kann.
  • Kenntnisse über das Starten des Containers mit Host-Pfad.
  • Vertrautheit mit grundlegenden Linux-Befehlen wie cd, mkdir, touch usw.
✨ Lösung prüfen und üben

Datenübertragung zwischen Containern

In einer containerisierten Umgebung ist es manchmal erforderlich, Daten von einem Container an einen anderen zu übertragen. In diesem Fall können verschiedene Techniken verwendet werden, um die Datenübertragung zu erreichen, und in dieser Herausforderung wird untersucht, wie Daten zwischen Containern geteilt werden können.

Ziel

Ihr Ziel ist es, die Datenübertragung zwischen zwei Containern umzusetzen. Genauer gesagt werden Sie Host-Pfad verwenden, um Container A zu starten, dann einen weiteren Container B starten und dessen Speichervolume mounten, um schließlich die Datenübertragung zwischen den beiden Containern zu ermöglichen.

Ergebnisbeispiel

Hier ist ein Beispiel dessen, was Sie am Ende dieser Herausforderung erreichen sollten:

  1. Erstellen eines Verzeichnisses /tmp/share auf dem lokalen Host.
labex:/tmp/ $ ls -ld /tmp/share
drwxr-xr-x 2 labex labex 4096 Jan 20 18:20 /tmp/share
  1. Erstellen eines Containers namens nginx-share auf der Grundlage des nginx-Images und Mounten des lokalen Verzeichnisses /tmp/share an das Verzeichnis /usr/share/nginx/html im Container.
labex:/tmp/ $ docker ps | grep nginx-share
216d02d94f39   nginx     "/docker-entrypoint.…"   55 seconds ago   Up 55 seconds   80/tcp    nginx-share
  1. Erstellen eines Containers namens busybox-share auf der Grundlage des busybox-Images und Mounten von nginx-share Container.
labex:/tmp/ $ docker ps | grep busy
30bf04aee681   busybox   "sh"                     43 seconds ago   Up 42 seconds             busybox-share
  1. Erstellen einer lokalen Datei namens share.txt mit dem Inhalt hello share.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat share.txt
hello share
  1. Kopieren der share.txt-Datei in den nginx-share-Container.
labex:/tmp/ $ docker exec nginx-share cat /usr/share/nginx/html/share.txt
hello share
  1. Wechseln Sie in den busybox-share-Container, um zu überprüfen, ob die share.txt-Datei vorhanden ist.
labex:/tmp/ $ docker exec busybox-share cat /usr/share/nginx/html/share.txt
hello share

Anforderungen

Um diese Herausforderung zu bestehen, benötigen Sie Folgendes:

  • Vertrautheit mit den grundlegenden Operationen und Begriffen von Docker-Containern.
  • Verwenden von Docker-Befehlszeilentools zum Erstellen, Ausführen und Beenden von Containern.
  • Verständnis des Begriffs und der Verwendung von Datenspeichern.
  • Verständnis, wie ein Datenspeicher in einem Container gemounted wird.
  • Vertrautheit mit grundlegenden Linux-Befehlen wie cd, mkdir, touch usw.
✨ Lösung prüfen und üben

Zusammenfassung

Herzlichen Glückwunsch zum Beenden dieser Herausforderung. Wenn Sie jetzt in der Verwendung von Speichervolumen in Containern bewandert sind, dann los!