Im Fall von Docker , werden die Daten im Container gespeichert. Und wenn wir den Container entfernen, gehen Daten verloren. In dieser Anleitung lernen wir, wie man Docker-Volumes erstellt, wie man sie an die Container anfügt und wie das gleiche Volume von zwei oder mehr Containern zum Speichern der Daten gemeinsam genutzt werden kann.
Wenn Sie die Docker-Grundlagen noch nicht kennen, lesen Sie die folgende Anleitung:
- Erste Schritte mit Docker
Warum benötigen wir Volumes für Docker?
- Beim Löschen von Containern werden Volumes nicht gelöscht.
- Volume an Container anhängen oder entfernen.
- Volumes (Speicher/Daten) auf verschiedene Container verteilen.
- Container vom Lager entkoppeln.
- Volume auf Remote-Host oder Cloud speichern.
Wir können sowohl die Daten als auch den Container logisch aufteilen. Wir können die Daten so aufbewahren, dass sie entfernt werden
Im Container werden dann auch unsere Daten vorhanden sein. Nachdem wir also den Container zerstört haben, können wir das Volume sowohl an bestehende Container als auch an neue Container anhängen.
Erste Schritte mit Docker-Volumes
Das Docker-Volume Der Befehl zeigt die Details der Volume-Befehle an, mit denen wir ein Volume erstellen, die detaillierten Daten des Volumes überprüfen, die verfügbaren Volumes auflisten und die Volumes entfernen können.
# docker volume
Zeigen Sie den Hilfebereich des Befehls „docker volume“ an
Erstellen von Docker-Volumes
Die Syntax zum Erstellen eines Docker-Volumes lautet:
docker volume create <volume_name>
Beispiel:
# docker volume create devops_volume
Der obige Befehl erstellt ein Docker-Volume namens devops_volume .
Docker-Volume erstellen
Docker-Volumes auflisten
Um alle erstellten Docker-Volumes aufzulisten, führen Sie Folgendes aus:
# docker volume ls
Docker-Volumes auflisten
Inspizieren von Docker-Volumes
Die Docker-Volumenprüfung Der Befehl gibt Ihnen die Details zur Erstellung des Volumes, Speicherort, Namen und Umfang.
Syntax:
docker volume inspect <volume_name>
Lassen Sie mich Ihnen die Details eines Docker-Volumes mit dem Namen devops_volume zeigen .
# docker volume inspect devops_volume
Docker-Volumes prüfen
Erstellen von Containern mit dem angehängten Volume
Syntax:
docker container create --name <container_name> -it --mount source<volume_name>,target=/<folder_Name> <image_name>
Beispiel:
# docker container create --name myBusyBox1 -it --mount source=devops_volume,target=/app busybox
Erstellen Sie einen Container mit dem daran angehängten Volume
Um zu überprüfen, ob der Container erstellt wurde oder nicht, verwenden Sie docker ps -a Befehl:
"docker ps"-Befehlsausgabe
Container starten
Um den neu erstellten Container zu starten, zum Beispiel myBusyBox1 , ausführen:
# docker container start myBusyBox1
Docker-Container starten
Wie Sie im obigen Screenshot sehen, wurde der Container myBusyBox1 vor 8 Minuten erstellt und vor 6 Sekunden gestartet.
Kopieren von Dateien zwischen Containern von einem freigegebenen Volume
Lassen Sie uns ein Szenario erstellen, in dem wir die Datei in einem Container am freigegebenen Speicherort erstellen und versuchen, von einem anderen Container aus auf die Datei zuzugreifen.
Wir haben bereits einen Container namens myBusyBox1 erstellt. Lassen Sie uns eine andere erstellen, zum Beispiel myBusyBox2 .
Container erstellen
Jetzt haben wir zwei Container im laufenden Zustand, myBusyBox1 und myBusyBox2.
Lassen Sie uns eine Verbindung zum ersten Container herstellen und eine Datei in /app erstellen Ordner.
# docker exec -it myBusyBox1 sh
Der obige Befehl führt Sie in den Container.
Erstellen Sie dann einen neuen Ordner mit dem Namen devops im Ordner /app und verlassen Sie den ersten Container.
mit erstem Container verbinden
Kopieren Sie nun eine Datei, zum Beispiel index.html , vom lokalen System zum Speicherort /app/devops/ des Containers myBusyBox1.
# docker container cp index.html myBusyBox1:/app/Devops
Verbinden Sie sich nun mit einem anderen zweiten Container, z. B. myBusyBox2 und überprüfen Sie dies in /app/devops Ordner die index.html Datei vorhanden ist oder nicht.
# docker exec -it myBusyBox2 sh
mit zweitem Container verbinden
Aus dem obigen Screenshot wird bestätigt, dass beide Container dasselbe Volume teilen.
Wir können den Mountpoint-Standort des Volumes mit docker volume inspect überprüfen Befehl wie unten:
# docker volume inspect devops_volume
docker inspect volume Befehl
Wie Sie sehen, ist der Mountpoint-Speicherort /var/lib/docker/volumes/devops_volume/_data .
Lassen Sie uns zum Einhängepunkt gehen und sehen, ob die kopierte Datei verfügbar ist oder nicht.
Einhängepunkt für Docker-Volumes
Am Mountpoint-Standort haben wir dieselbe Datei gefunden.
Docker-Volumes löschen
Die Syntax zum Löschen eines Volumes lautet:
docker volume rm <volume_name>
Lassen Sie uns das Volume mit dem Namen devops_volume löschen .
# docker volume rm devops_volume
ein Docker-Volume löschen
Im obigen Screenshot versuchen wir, das Volume zu löschen, können es aber nicht löschen, da das Volume bereits verwendet wird. Also müssen wir zuerst den Container töten und Volumen frei machen. Und dann können wir das Volume löschen.
Entfernen Sie dazu zunächst alle laufenden Container mit dem Befehl:
# docker rm –f $(docker ps -aq)
Und dann das Volume entfernen:
# docker volume rm devops_volume
Docker-Volumes löschen
Alle Volumes auf einmal löschen
Mit docker rm Befehl können wir jeweils ein Volume entfernen. Wenn wir mehrere Volumes haben und alle Volumes löschen möchten, müssen wir prune verwenden Befehl.
Lassen Sie uns ein paar Bände erstellen:
Docker-Volumes erstellen
Löschen Sie nun alle Docker-Volumes auf einmal mit dem Befehl:
# docker volume prune
alle Docker-Volumes auf einmal löschen
Sehen? Wir haben alle Volumes auf einmal gelöscht.
Empfohlene Lektüre:
- Erläuterung von Docker-Netzwerkkonzepten
- So aktualisieren Sie laufende Docker-Container automatisch
- ctop – Ein Befehlszeilen-Überwachungstool für Linux-Container
- Portainer – Eine einfachste Art, Docker zu verwalten
- PiCluster – Eine einfache, webbasierte Docker-Verwaltungsanwendung
- Dockly – Docker-Container vom Terminal aus verwalten
Über den Autor:
Dhruv Tiwari ist ein DevOps-Ingenieur, der es liebt, Dinge zu automatisieren, mit Linux in großem Maßstab zu arbeiten und von dem Tag zu träumen, an dem Systeme intelligent genug sind, um sich nie mehr bei einer Linux-Box anmelden zu müssen. Reise von CI/CD vom Quellcode über die Codebereitstellung bis zur Produktion.