Docker hat die Art und Weise, wie wir unsere Programme verpacken, seit seiner Einführung im Jahr 2013 verändert. Es ermöglicht Entwicklern, innovative Software mit minimalen Abhängigkeiten zu erstellen, und macht die Bereitstellung einfacher als je zuvor. Wenn Sie ein aufstrebender Softwareentwickler sind, der die Docker-Plattform beherrschen möchte, müssen Sie die verschiedenen Docker-Lautstärkebefehle gut verstehen. Volumes sind ein Mechanismus, der von Docker verwendet wird, um persistente Datenspeicherung bereitzustellen. Sie bieten erhebliche Vorteile in Bezug auf die Softwareentwicklung und -bereitstellung. Wir haben uns heute die Zeit genommen, Ihnen die Grundbausteine von Datenvolumen in Docker beizubringen.
Wichtige Beispiele für Docker-Volume-Befehle
Dieser Leitfaden vermittelt Ihnen die aktuellen Methoden, die von Entwicklern verwendet werden, um persistente Datenspeicherung in kommerziellen und Open-Source-Projekten zu implementieren. Nach Abschluss dieses Leitfadens können Sie Ihre eigenen Datenvolumen erstellen und mühelos von Ihren Docker-Containern aus darauf zugreifen. Wenn Sie ein absoluter Anfänger sind, empfehlen wir Ihnen, unseren Leitfaden zu den wichtigsten Docker-Befehlen zu lesen, bevor Sie mit Volumes arbeiten.
1. Docker-Volumes erstellen
Es ist sehr einfach, Datenvolumes in Docker zu erstellen. Dazu müssen Sie den volume create-Befehl des Docker-Daemons verwenden. Werfen Sie einen kurzen Blick auf das folgende Beispiel, um zu sehen, wie das funktioniert.
$ docker volume create testVolume
Dieser Befehl erstellt einen Daten-Volume-Namen testVolume die von einem bestimmten Container verwendet oder von einem Cluster von Containern gemeinsam genutzt werden können. Sie können dieses Volume jetzt an einem Ort innerhalb des Containers bereitstellen. Sobald dies erledigt ist, ist es sehr einfach, Containerdaten vom Hostcomputer aus zu speichern oder darauf zuzugreifen.
2. Verfügbare Volumina anzeigen
Es ist üblich, dass Entwicklungsumgebungen eine große Anzahl von Datenmengen haben. Daher ist es wichtig, die spezifischen Volumes zu identifizieren, mit denen Sie arbeiten. Glücklicherweise ist es sehr einfach, alle derzeit deklarierten Datenvolumes mit dem Unterbefehl volume ls des Docker-Daemons aufzulisten.
$ docker volume ls- -
Sie erhalten eine Liste aller auf Ihrem Host vorhandenen Docker-Volumes, indem Sie den obigen Befehl ausführen. Es druckt die Namen der Datenträger sowie die jeweiligen Datenträgertreiber aus. Die Datenvolumes werden in einem bestimmten Teil des Host-Dateisystems gespeichert, nämlich /var/lib/docker/volumes/ unter Linux.
3. Überprüfen von Docker-Volumes
Der Befehl „volume inspects“ des Docker-Daemons liefert uns wichtige Informationen über ein bestimmtes Volume. Es zeigt Informationen wie Volume-Treiber, Einhängepunkt, Bereich und Bezeichnungen an. Der folgende Befehl demonstriert dies anhand eines praktischen Beispiels.
$ docker volume inspect testVolume
Die resultierenden Daten zeigen, dass unser testVolume wird am Speicherort /var/lib/docker/volumes/testVolume/_data gemountet unserer Hostmaschine. Es zeigt auch das Erstellungsdatum für diese Informationen sowie alle angegebenen Optionen an. Es erleichtert Entwicklern die Fehlersuche bei Datenmengen erheblich.
4. Löschen bestimmter Volumes
Wenn Sie ungenutzte Datenmengen angesammelt haben, ist es eine gute Idee, diese zu entfernen. Auf diese Weise können Sie Speicherplatz in der Hostumgebung freigeben. Das folgende Beispiel zeigt, wie Sie ein einzelnes Volume mit seinem Namensattribut löschen können.
$ docker volume rm testVolume
Sie können also ein bestimmtes Datenvolume löschen, indem Sie den Unterbefehl volume rm gefolgt vom Volume-Namen verwenden. Als Bestätigung wird der Name des gelöschten Volumes in Ihrem Linux-Terminalemulator zurückgegeben.
5. Mehrere Volumes löschen
Auch das Löschen mehrerer Datenvolumes ist recht einfach. Übergeben Sie einfach nacheinander die Namen der Volumes, die Sie löschen möchten. Der folgende Befehl zeigt dies in Aktion.
$ docker volume rm testVolume newVolume otherVolume
Dieser Befehl entfernt die drei angegebenen Datenvolumes. Beachten Sie, dass wir newVolume nicht erstellt haben und otherVolume . Sie wurden hier nur zu Demonstrationszwecken verwendet. Stellen Sie daher sicher, dass Ihre Datenmengen überhaupt vorhanden sind, bevor Sie sie löschen.
6. Alle Volumes löschen
Es ist immer eine gute Idee, Ihre Datenmengen loszuwerden, sobald Ihre Container von Ihrem Entwicklungscomputer in die Produktionsumgebung verschoben wurden. Glücklicherweise ermöglicht der Docker-Daemon Entwicklern, alle verfügbaren Docker-Volumes mit einem einzigen Befehl zu entfernen, wie unten dargestellt.
$ docker volume prune
Darüber hinaus ist dieser Docker-Volume-Befehl elegant, was bedeutet, dass er keine Volumes entfernt, die von einem vorhandenen Container verwendet werden. Daher ist es sehr sicher zu verwenden und hilft, dringend benötigten Speicherplatz in Entwicklungsumgebungen freizugeben.
7. Container mit Datenvolumen erstellen
Wir haben bisher nur einige grundlegende Lautstärkeoperationen gezeigt. In den meisten realen Szenarien müssen Sie Ihre Datenvolumes jedoch in einem Docker-Container bereitstellen. Der folgende Docker-Befehl zeigt Ihnen, wie Sie einen Docker-Container erstellen und ein Datenvolume in diesen Container mounten.
$ docker run -d -it --name test-container -v "testVolume":/tmp ubuntu:xenial
$ docker run -d -it --name test-container --volume "testVolume":/tmp ubuntu:xenial
Dieser Befehl erstellt einen Container namens test-container unter Verwendung des ubuntu:xenial-Images und stellt unser Datenvolume in /tmp bereit Standort dieses Containers. Weitere Informationen finden Sie, indem Sie den folgenden Befehl ausführen und den Abschnitt „Mount“ der Ausgabe überprüfen.
$ docker inspect test-container
8. Mounten von Datenvolumes in Container
Das -Mount Option in Docker kann verwendet werden, um ein vorhandenes Datenvolumen an einen bestimmten Teil des Container-Dateisystems zu adressieren. Obwohl das Ergebnis dem obigen Befehl völlig ähnlich sein wird, ist es für viele Linux-Entwickler intuitiver.
$ docker run -d -it --name test-container --mount source=testVolume,target=/tmp ubuntu:xenial
Das –Mount Option eine Reihe von durch Kommas getrennten Tupeln. Diese sind
9. Bind Mounts in Docker erstellen
Bind-Mounts sind ein Persistenzmechanismus, der seit den Anfängen von Docker verfügbar ist. Sie bieten im Vergleich zu Docker-Volumes eine etwas eingeschränkte Funktionalität, sind aber in bestimmten Fällen besser geeignet. Im Gegensatz zu Volumes hängen Bind-Mounts vom zugrunde liegenden Host-Dateisystem ab.
$ docker run -d -it --name test-container --mount type=bind,source=$(pwd),target=/tmp ubuntu:xenial
Der obige Befehl erstellt einen Bind-Mount, der das aktuelle Arbeitsverzeichnis Ihres Linux-Dateisystems auf /tmp abbildet Standort des Containers. Die type=bind tuple gibt an, dass dies eher ein Bind-Mount als ein Volume ist.
10. Datenvolumes vorbelegen
Manchmal müssen Entwickler ihre Datenvolumen beim Erstellen von Docker-Containern vorab auffüllen. Diese Technik gilt jedoch nur, wenn das Ziel des Containers Daten vor der Volume-Erstellung enthält.
$ docker run -d --name=nginxContainer -v nginxVol:/usr/share/nginx/html nginx:latest
Dieser Befehl erstellt zuerst das Volume nginxVol und füllt es mit dem Inhalt von /usr/share/nginx/html Speicherort des Dateisystems des Containers. Jetzt sind diese Daten für alle anderen Container zugänglich, die sich das nginxVol-Volume teilen. Sie können alternativ die Mount-Syntax verwenden, wie unten gezeigt.
$ docker run -d --name=nginxContainer --mount source=nginxVol,destination=/usr/share/nginx/html nginx:latest
11. Nur-Lese-Volumes verwenden
Standardmäßig haben alle Container sowohl Lese- als auch Schreibzugriff auf ihre jeweiligen Datenvolumes. Allerdings müssen nicht alle Container Daten auf ein Volume schreiben. Oft reicht es schon aus, Daten auszulesen. In solchen Fällen können Sie Ihrem Container schreibgeschützten Zugriff zuweisen. Überprüfen Sie die Docker-Lautstärkebefehle, um zu sehen, wie dies funktioniert.
$ docker run -d --name=nginxContainer -v nginxVol:/usr/share/nginx/html:ro nginx:latest
Durch einfaches Hinzufügen des „:ro ‘ Feld nach dem Ziel verbietet dem nginxContainer das Schreiben von Daten in die nginxVol. Sie müssen die Datei „readonly“ verwenden ‘ Option, wenn Sie Volumes mit der Option –mount erstellen. Beachten Sie den Unterschied in der Syntax sorgfältig.
$ docker run -d --name=nginxContainer --mount source=nginxVol,destination=/usr/share/nginx/html,readonly nginx:latest
12. Volumes mit Treibern erstellen
Volume-Treiber sind ein flexibler Mechanismus, der von Docker verwendet wird, um Zugriff auf Remote-Mounts, Datenverschlüsselung und andere Funktionen bereitzustellen. Die folgenden Befehle zeigen Benutzern, wie sie einen Docker-Container mit einem bestimmten Volume-Treiber erstellen.
$ docker volume create --driver vieux/sshfs -o [email protected]:/home/session -o password=testPassword sshVolume
Dieser Befehl erstellt mit dem vieux/sshfs-Treiber ein Docker-Datenvolume. Dieser Treiber ermöglicht es Entwicklern, entfernte Verzeichnisse mit der SSHFS-Technologie anzuhängen.
13. Ausführen von Containern, die Volumes mithilfe von Treibern erstellen
Sie können den folgenden Befehl verwenden, um Container zu erstellen und zu starten, die Volume-Treiber zum Erstellen ihres Daten-Volumes verwenden. Dieses Beispiel baut auf dem obigen auf.
$ docker run -d --name sshfsContainer --volume-driver vieux/sshfs --mount src=sshVolume,target=/tmp,[email protected]:/home/session,volume-opt=password=testPassword nginx:neueste
Das Tupel volume-opt übergibt die Optionen. Es ist nicht für jeden Anwendungsfall erforderlich. Wenn Sie jedoch volume-opt angeben, müssen Sie –mount verwenden Flag anstelle von -v oder –Lautstärke.
14. Dienste erstellen, die ein NFS-Volume verwenden
NFS oder Network File System ist ein verteiltes Dateifreigabesystem, das es uns ermöglicht, entfernte Dateisysteme so zu verwenden, als wären sie Teil des lokalen Dateisystems. Der folgende Befehl zeigt, wie ein Dienst erstellt wird, der ein NFS-Volume verwendet.
$ docker service create -d --name nfs-service --mount 'type=volume,source=nfsVolume,target=/tmp,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/var/docker-nfs,volume-opt=o=addr=10.0.0.10' nginx:latest
Dieser Befehl geht davon aus, dass unser NGS-Server auf 10.0.0.10 ausgeführt wird, und stellt /var/docker-nfs bereit Verzeichnis. Es verwendet auch NFSv3. Daher müssen Sie einige Anpassungen vornehmen, bevor Sie dies mit NFSv4 verwenden.
15. Container sichern
Volumes bieten Entwicklern eine flexible Möglichkeit, wichtige Containerdaten zu sichern. Zur Veranschaulichung erstellen wir zunächst einen neuen Container namens test-container.
$ docker run -v /data --name test-container ubuntu:xenial /bin/bash
Test-Container hat also ein Volume namens /data. Jetzt starten wir einen weiteren Container und mounten /data Volumen aus Testbehälter. Wir werden dann ein lokales Verzeichnis unseres Dateisystems als /backup mounten und speichern Sie dann den Inhalt von /data zu /backup Verzeichnis als backup.tar.
$ docker run --rm --volumes-from test-container -v $(pwd):/backup ubuntu:xenial tar cvf /backup/backup.tar /data
Die –Bände-von Option bedeutet, dass wir das Datenvolumen des Testcontainers tatsächlich in unseren neuen Container mounten.
16. Container-Sicherungen wiederherstellen
Es ist auch sehr einfach, Ihre Container aus Sicherungsdateien wiederherzustellen. Sie können die Daten im selben Container oder in einem bestimmten Container wiederherstellen. Wir zeigen Ihnen hier, wie Sie den Inhalt der im vorherigen Beispiel erstellten Datei backup.tar in einem anderen Container wiederherstellen.
$ docker run -v /data --name test-container2 ubuntu /bin/bash
Dieser Befehl erstellt einen weiteren neuen Container mit /data Volumen. Jetzt extrahieren wir den Inhalt der Datei backup.tar in dieses neue Datenvolumen.
$ docker run --rm --volumes-from test-container2 -v $(pwd):/backup ubuntu bash -c "cd /data &&tar xvf /backup/backup.tar --strip 1"Sie können Ihre Sicherungen und Wiederherstellungen mit diesen einfachen, aber flexiblen Docker-Volume-Befehlen ganz einfach automatisieren.
17. Anonyme Volumes entfernen
Weiter oben haben wir gesehen, wie man ein normal benanntes Volume löscht. Docker hat jedoch auch eine andere Art von Datenvolumes, die als anonyme Volumes bezeichnet werden. Werfen Sie einen kurzen Blick auf den folgenden Befehl, um zu sehen, wie sich der Löschvorgang zwischen benannten und anonymen Volumes unterscheidet.
$ docker run --rm -v /anon -v whats-in-a-name:/tmp busybox topDer obige Befehl erstellt ein anonymes Volume namens /anon und ein benanntes Volume namens whats-in-a-name . Jetzt entfernt Docker diesen Container automatisch beim Beenden. Es wird jedoch nur /anon gelöscht Volume, nicht das Whats-in-a-Name-Volume. Sie müssen das mit dem Docker-Lautstärkebefehl rm.
löschen18. Festlegen der Mount-Propagation
Mount-Propagation bezeichnet den Kontrollfluss zwischen dem ursprünglichen Mount und seinen Nachbildungen. Standardmäßig verwenden sowohl Bind Mount als auch Volumes die rprivate Einstellung. Dadurch wird jegliche Ausbreitung zwischen der Originalhalterung und ihren Nachbauten unterbunden. Sie können diese Einstellung überschreiben, indem Sie das Bind-Propagation-Tupel des Bind-Mount verwenden.
$ docker run -d -it --name test-container --mount type=bind,source="$(pwd)"/test,target=/tmp --mount type=bind,source="$( pwd)"/test,target=/temp,readonly,bind-propagation=shared nginx:latestDieser Befehl hängt die Datei /test ein Verzeichnis zweimal in den Container. Außerdem jede neue Ergänzung zur Datei /tmp mount wird in /temp widergespiegelt montieren. Sie können die Weitergabeeinstellung jedoch nicht überschreiben, wenn Sie Volumes verwenden. Es funktioniert nur, wenn Bind Mount auf einem Linux-Host verwendet wird.
19. Volume Command Manual anzeigen
Sie können die grundlegende Verwendung der Lautstärkebefehle einfach anzeigen, indem Sie den folgenden Befehl verwenden.
$ man DockervolumenEs enthält jedoch keine tiefergehenden Erklärungen. Wir empfehlen Ihnen daher, die offizielle Docker-Dokumentation zu Volumes und Bind-Mounts zu konsultieren.
20. Hilfeseite für Unterbefehle anzeigen
Verwenden Sie den folgenden Befehl, um die primären Optionen anzuzeigen, die für das Docker-Volume verfügbar sind.
$ docker volume --helpSie können auch weitere Informationen zu einer bestimmten Option anzeigen, indem Sie die folgende Syntax verwenden.
$ docker volume BEFEHL --help$ docker volume ls --help
Abschlussgedanken
Docker-Volumes bieten eine dringend benötigte Einrichtung für moderne Anwendungen. Sie ermöglichen es Entwicklern, robuste, hochmoderne Apps und Dienste zu erstellen, indem sie Speicherprobleme beseitigen. Darüber hinaus erleichtern Docker-Volume-Befehle das Erstellen und Verwalten von Backups Ihrer Containerdaten. Damit Sie Datenmengen leichter meistern können, haben wir diesen durchdachten Ratgeber erstellt. Wir empfehlen Ihnen dringend, zuerst mit den grundlegenden Befehlen zu beginnen und dann schrittweise zu komplexen, realen Szenarien überzugehen. Hoffentlich haben wir Ihnen in diesem Leitfaden die Informationen bereitgestellt, nach denen Sie gesucht haben. Vergessen Sie nicht, uns bei Fragen einen Kommentar zu hinterlassen.