Implementierung von Docker-Datenvolumenoperationen

Implementierung von Docker-Datenvolumenoperationen

Erste Schritte mit Datenvolumes

Wenn wir im vorherigen Fall Daten vom Host in den Container kopieren müssen, verwenden wir normalerweise den Kopierbefehl von Docker, aber die Leistung ist immer noch etwas schlecht. Gibt es keine Möglichkeit, diese Kopie auf die E/A-Leistung der lokalen Festplatte zu bringen? haben!

Datenvolumes können das Kopiersystem umgehen und Verzeichnisse oder Dateien zwischen mehreren Containern oder zwischen Containern und dem Host gemeinsam nutzen. Datenvolumes umgehen das Kopiersystem und können lokale Festplatten-E/A-Leistung erzielen.

Dieser Artikel veranschaulicht den Lesern zunächst anhand eines einfachen Falles die grundsätzliche Nutzung von Datenmengen.

Am Beispiel des oben verwendeten Nginx-Images können Sie beim Ausführen des Containers mit dem folgenden Befehl ein Datenvolumen angeben:

docker run -itd --name nginx -v /usr/share/nginx/html/ -p 80:80 bc26f1ed35cf

Der Operationseffekt ist wie folgt:

An diesem Punkt haben wir ein Datenvolumen erstellt und es im Verzeichnis /usr/share/nginx/html/ des Containers gemountet. Wie Sie wissen, ist dieses Verzeichnis eigentlich das HTML-Verzeichnis, in dem nginx speichert. Indem wir das Datenvolumen hier mounten, müssen wir nur den lokalen Mapping-Speicherort ändern, um die Seite zu ändern.

Verwenden Sie als Nächstes den Befehl „Docker Inspection“, um die Details des soeben erstellten Containers anzuzeigen und das Datenvolumenzuordnungsverzeichnis wie folgt zu finden:

Wie Sie sehen, verwendet Docker standardmäßig das Verzeichnis /var/lib/docker/volumes/0746bdcfc045b237a6fe2288a3af9d7b80136cacb3e965db65a212627e217d75/_data des Hosts als Quellverzeichnis. Geben Sie als Nächstes das Verzeichnis wie folgt ein:

Zu diesem Zeitpunkt wurde festgestellt, dass der Dateiinhalt in diesem Verzeichnis mit dem Dateiinhalt im Verzeichnis /usr/share/nginx/html/ im Container übereinstimmt. Dies liegt daran, dass beim Mounten eines leeren Datenvolumens in einem nicht leeren Verzeichnis im Container die Dateien in diesem Verzeichnis in das Datenvolumen kopiert werden (wenn ein nicht leeres Datenvolumen in einem Verzeichnis im Container gemountet wird, werden die Daten im Datenvolumen im Verzeichnis im Container angezeigt. Wenn sich im Verzeichnis im ursprünglichen Container Daten befinden, werden die ursprünglichen Daten ausgeblendet).

Tipps:

Da Docker auf dem Mac etwas Besonderes ist, kann das oben genannte Verzeichnis /var/lib/xxxx direkt aufgerufen werden, wenn es sich in einer Linux-Umgebung befindet. Wenn es sich auf einem Mac befindet, müssen Sie zuerst den folgenden Befehl ausführen, um das Verzeichnis /var/lib/xxx in der neu eingegebenen Befehlszeile aufzurufen:

Bildschirm ~/Library/Containers/com.docker.docker/Data/vms/0/tty

Ändern Sie als Nächstes den Inhalt der Datei index.html in der Datei wie folgt:

echo "hallo volumes">index.html

Kehren Sie nach Abschluss der Änderung zum Browser zurück und geben Sie http://localhost ein, um die Daten auf der Seite index.html in nginx anzuzeigen. Stellen Sie fest, dass sie sich geändert haben. Dies zeigt an, dass die Dateien auf dem Hostcomputer mit dem Container geteilt werden.

Kombiniert mit dem Hostverzeichnis

Die Verwendung von Datenvolumes im obigen Beispiel ist nicht die beste Lösung. Generell müssen wir möglicherweise explizit angeben, dass ein Verzeichnis auf dem Hostcomputer in den Container eingebunden werden soll. Die Angabemethode lautet wie folgt:

docker run -itd --name nginx -v /Benutzer/sang/blog/docker/docker/:/usr/share/nginx/html/ -p 80:80 bc26f1ed35cf

Dadurch wird /Users/sang/blog/docker/docker/ im Host in das Verzeichnis /usr/share/nginx/html/ im Container eingebunden. Als Nächstes müssen die Leser nur HTML-Dateien im Verzeichnis /Users/sang/blog/docker/docker/ hinzufügen oder HTML-Dateien ändern, und der Effekt ist beim Nginx-Zugriff sofort sichtbar.

Diese Verwendung ist sehr praktisch für Entwicklung und Tests, da der Container nicht erneut bereitgestellt oder neu gestartet werden muss.

Hinweis: Die Hostadresse ist ein absoluter Pfad

Weitere Operationen

Datenvolumen im Dockerfile

Wenn der Entwickler Dockerfile zum Erstellen des Images verwendet, kann er beim Erstellen des Images auch das Datenvolumen deklarieren, zum Beispiel:

VON nginx
HINZUFÜGEN https://www.baidu.com/img/bd_logo1.png /usr/share/nginx/html/
RUN echo "hallo Docker-Volume!">/usr/share/nginx/html/index.html
VOLUMEN /usr/share/nginx/html/

Auf diese Weise wird ein anonymes Datenvolumen konfiguriert. Während des Betriebs werden Daten in das Verzeichnis /usr/share/nginx/html/ geschrieben, wodurch zustandslose Änderungen in der Containerspeicherschicht erreicht werden können.

Alle Datenmengen anzeigen

Um alle Datenvolumes anzuzeigen, verwenden Sie den folgenden Befehl:

Docker-Volumen ls

Wie in der Abbildung gezeigt:

Details zum Datenvolumen anzeigen

Sie können Datendetails entsprechend dem Datenträgernamen wie folgt anzeigen:

Docker-Volumenprüfung

Das Ausführungsergebnis ist wie folgt:

Löschen eines Datenvolumens

Sie können den Befehl docker volume rm verwenden, um ein Datenvolume zu löschen, oder Sie können docker volume prune verwenden, um Datenvolumes stapelweise zu löschen, wie folgt:

Beim Löschen im Stapel wurden nicht alle Datenvolumes gelöscht, sondern eines blieb übrig. Dies liegt daran, dass das Datenvolume noch verwendet wird. Stoppen und entfernen Sie die zugehörigen Container und löschen Sie das Datenvolume dann erneut, um es erfolgreich zu löschen, wie in der Abbildung dargestellt:

Datenvolumencontainer

Ein Datenvolumencontainer ist ein Container, der speziell zum Mounten von Datenvolumen verwendet wird. Dieser Container wird hauptsächlich von anderen Containern referenziert und verwendet. Der sogenannte Datenvolumencontainer ist eigentlich ein gewöhnlicher Container, wie unten gezeigt:

  • Erstellen eines Datenvolumencontainers

Erstellen Sie mit der folgenden Methode einen Datenvolumencontainer:

docker run -itd -v /usr/share/nginx/html/ --name meinedaten ubuntu

Die Auswirkung der Befehlsausführung ist wie folgt:

  • Referenzcontainer

Verwenden Sie den folgenden Befehl, um auf den Datenvolumencontainer zu verweisen:

docker run -itd --volumes-from mydata -p 80:80 --name nginx1 nginx
docker run -itd --volumes-from mydata -p 81:80 --name nginx2 nginx

An diesem Punkt mounten nginx1 und nginx2 beide dasselbe Datenvolumen in das Verzeichnis /usr/share/nginx/html/ . Wenn einer der drei Container eine Datei im Verzeichnis ändert, können die anderen beiden die Änderung sehen.

Verwenden Sie an diesem Punkt den Befehl docker inspect um die Details des Containers anzuzeigen, und stellen Sie fest, dass die Beschreibungen der Datenvolumina der drei Container konsistent sind, wie unten gezeigt:

Zusammenfassen

In diesem Artikel werden hauptsächlich die Containeroperationen in Datenvolumina vorgestellt. Insgesamt ist es sehr einfach. Freunde, habt ihr es gelernt?

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Erstellen und Verwenden von Docker-Datenvolumencontainern
  • Detaillierte Erklärung der Datenmengen von Docker-Containern
  • Verwenden von Docker-Datenvolumes und Container-Orchestrierung
  • Detaillierte Erläuterung des Docker-Datenmanagements (Datenvolumes und Datenvolume-Container)
  • Erweiterte Docker-Volumes
  • Detaillierte Erläuterung der Docker-Datenvolumenverwaltung
  • Codebeispiele für allgemeine Docker-Datenvolumenvorgänge

<<:  Detaillierte Erklärung des Befehlsmodus in der Javascript-Praxis

>>:  So beheben Sie den MySQL-FEHLER 1045 (28000) - Zugriff wegen Benutzer verweigert

Artikel empfehlen

Eine kurze Einführung in Linux-Umgebungsvariablendateien

Im Linux-System können Umgebungsvariablen entspre...

Detaillierte Erklärung zur Verwendung von Bild-Tags in HTML

In HTML wird das <img>-Tag verwendet, um ei...

Detaillierter Prozess der Vue-Front-End-Verpackung

Inhaltsverzeichnis 1. Verpackungsbefehl hinzufüge...

Beispielcode zur Implementierung von Dreiecken und Pfeilen durch CSS-Rahmen

1. CSS-Boxmodell Die Box beinhaltet: Rand, Rahmen...

Ausführliche Erklärung dieses Schlüsselworts in JavaScript

Inhaltsverzeichnis 1. Einleitung 2. Verstehen Sie...

Detaillierte Erläuterung der MySQL-Lösung zur USE DB-Überlastung

Wenn wir auf einen Fehler stoßen, denken wir oft ...

Docker startet im Status „Beendet“

Nach dem Docker-Lauf ist der Status immer „Beende...

So deaktivieren Sie Webseitenstile mit dem Webentwickler von Firefox

Voraussetzung: Das Webentwickler-Plugin wurde inst...

js Promise-Methode zur gleichzeitigen Steuerung

Inhaltsverzeichnis Frage Hintergrund Idee & U...

Implementierung des Docker-Buildings für Maven+Tomcat-Basisimages

Vorwort In der Java-Programmierung werden die mei...

Detaillierte Erklärung gängiger Befehle im Docker-Repository

Einloggen Docker-Anmeldung Schließen Sie die Regi...