Probleme mit dem benannten Mount und dem anonymen Mount des Docker-Container-Datenvolumens

Probleme mit dem benannten Mount und dem anonymen Mount des Docker-Container-Datenvolumens

Was ist ein Containerdatenvolumen?

Das Containerdatenvolumen ist die Bereitstellung des Verzeichnisses. Das Verzeichnis unseres Containers wird auf dem Hostcomputer bereitgestellt, um die Dateifreigabefunktion zwischen dem Hostcomputer und dem Container zu realisieren.

Warum brauchen wir Container-Datenvolumen?

Die Idee von Docker besteht darin, die Anwendung und die Umgebung in einem Image zu packen; aber was ist mit den Daten? Ganz zu schweigen von der Datenbank. Während des Betriebs eines Projekts werden definitiv viele Protokolle generiert. Diese Protokolle sind für Entwickler sehr wichtig, da wir anhand dieser Protokolle erkennen können, welche Probleme während des Betriebs aufgetreten sind, und diese dann beheben können.

Im Container wird der Container jedoch jedes Mal gelöscht und durch ein neues Image ersetzt, wenn das Projekt aktualisiert und iteriert wird. Wenn Sie in diesem Fall diese Protokolldateien speichern möchten und sie jedes Mal auf den Hostcomputer kopieren, ist der Arbeitsaufwand etwas groß. Wenn die Protokolldateien zu groß sind, ist der Kopiervorgang außerdem sehr zeit- und arbeitsintensiv. Zu diesem Zeitpunkt müssen Sie also die Containerdatenvolumenfunktion verwenden. Um es einfach auszudrücken, ist diese Funktion sehr einfach, nämlich die Dateifreigabefunktion zwischen dem Host und dem Container zu öffnen. Die im Docker-Container generierten Datendateien werden in Echtzeit mit dem Hostcomputer synchronisiert. Im Gegenteil, die vom Hostcomputer generierten Dateien werden auch mit dem Container synchronisiert. Auf diese Weise wird eine bidirektionale Übertragungspipeline geöffnet.

Bildbeschreibung hier einfügen

Nachdem die Datenfreigabe zwischen Containern implementiert wurde, gibt es keinen Unterschied mehr zwischen Hauptcontainern und Untercontainern, da nur eine Kopie der freigegebenen Daten vorhanden ist, die auf dem Hostcomputer gespeichert ist. Das Löschen eines Containers wirkt sich nicht auf die Datensynchronisierung anderer Container aus.

Bildbeschreibung hier einfügen

verwenden

Die Verwendung von Containerdatenvolumes ist sehr einfach. Fügen Sie beim Ausführen einfach die Option -v hinzu.

docker run -d -v Hostverzeichnis: Containerverzeichnis Tomcat

Nach dem Ausführen des obigen Befehls werden die entsprechenden Verzeichnisse automatisch auf dem Container und dem Host erstellt und alle in den Verzeichnissen erstellten oder geänderten Dateien werden automatisch synchronisiert.

So prüfen Sie, ob ein Datenvolumen belegt ist

Um zu überprüfen, ob ein Container die Containerdatenvolumenfunktion verwendet, können Sie mit der inspect detaillierte Informationen zum Container anzeigen.

Docker prüft Container-ID/Containername

Nach der Ausführung des obigen Befehls werden viele formatierte JSON-Zeichenfolgen gedruckt. Zu diesem Zeitpunkt stellen wir fest, dass das Element mit dem Schlüssel Mounts die relevante Konfiguration des Containerdatenvolumens ist.

"Reittiere": [
    {
        "Typ": "binden",  
        "Quelle": "/root/dockerContainer", # Verzeichnis der Host-Maschine "Ziel": "/text", # Verzeichnis des Containers "Modus": "",
        „RW“: true, # RW ist lesbar und beschreibbar; ro ist schreibgeschützt und kann nur Dateien auf dem Hostcomputer ändern; 
        "Ausbreitung": "rprivate"
    }
],

Benannte und anonyme Reittiere

Mounten durch Angabe eines Pfades

In den obigen Beispielen verwenden wir den angegebenen Mount-Pfad, d. h. wir konfigurieren den Host-Pfad und den Container-Pfad.

docker run -d -v Hostverzeichnis: Containerverzeichnis Tomcat

Benanntes Reittier

In ein Verzeichnis mit dem angegebenen Namen einbinden;

# /xxx ist ein Verzeichnis, xxx ist ein Datenträgername, der ohne Schrägstrich ist der Datenträgername docker run -d -v Datenträgername: Containerverzeichnis tomcat 

# Suchen Sie das Verzeichnis, in dem sich der Volumename befindet. Docker-Volume prüfen Volumename

Lassen Sie es uns testen. Erstellen Sie zunächst einen Container und mounten Sie das Verzeichnis.

docker run -d --name mein_Tomcat -v mein_Ordner:/Daten/mein_Ordner Tomcat

Verwenden Sie den Befehl „inspect“, um Containerinformationen anzuzeigen

Docker inspiziere my_tomcat

Suchen Sie in den ausgedruckten Informationen nach dem Eintrag Mounts “, wobei das Source das Hostverzeichnis und das Destination das gemountete Containerverzeichnis ist.

"Reittiere": [
    {
        "Typ": "Volumen",
        "Name": "mein_Ordner",
        "Quelle": "/var/lib/docker/volumes/my_folder/_data",
        "Ziel": "/data/my_folder",
        "Treiber": "lokal",
        "Modus": "z",
        "RW": wahr,
        "Ausbreitung": ""
    }
]

Dann betreten Sie den Container

docker exec -it my_tomcat /bin/bash

# Dieses Verzeichnis wurde auch im Container root@ef94ff8928a1:/data/my_folder# pwd erstellt
/data/mein_Ordner

Anonymer Berg

Anonymes Mounten bedeutet, dass nur ein Containerverzeichnis, aber kein Hostverzeichnis vorhanden ist. Das generierte Verzeichnis ist also eine lange verschlüsselte Zeichenfolge. Generell wird anonymes Mounten nicht empfohlen, da verschlüsselte Zeichenfolgen das Auffinden erschweren.

docker run -d -v \container Verzeichnis Tomcat

Kommen Sie und testen Sie es. Erstellen Sie zuerst einen Container und mounten Sie das Verzeichnis

docker run -d --name mein_Tomcat_2 -v /mein_Ordner_2 Tomcat

Verwenden Sie den Befehl „inspect“, um Containerinformationen anzuzeigen

Docker inspizieren my_tomcat_2

Suchen Sie in den gedruckten Informationen nach dem Eintrag Mounts “. Dabei ist das Source das Hostverzeichnis und das Destination das Verzeichnis des gemounteten Containers.

"Reittiere": [
    {
        "Typ": "Volumen",
        "Name": "df4c649772a5ae65716de8ede0607d0776f8c1e2eda1d87b3ec9eaf011b43616",
        "Quelle": "/var/lib/docker/volumes/df4c649772a5ae65716de8ede0607d0776f8c1e2eda1d87b3ec9eaf011b43616/_data",
        "Ziel": "/mein_Ordner_2",
        "Treiber": "lokal",
        "Modus": "",
        "RW": wahr,
        "Ausbreitung": ""
    }
]

Datenaustausch zwischen Containern - Volumes von

Es gibt ein Szenario, in dem Container A und Container B Daten gemeinsam nutzen müssen. Das heißt, ich möchte den in Container A geänderten Inhalt in Container B sehen. Wie soll diese Funktion also erreicht werden? Anschließend steht Ihnen die Datenvolumen-Containerfunktion zur Verfügung, mit der Sie Daten auch zwischen mehreren Containern synchronisieren können, nicht nur zwischen zwei Containern.

1. Erstellen Sie den ersten Container centos_1 und mounten Sie das Verzeichnis /data/centos auf dem Host. Die Verzeichnisse des Hosts und des Containers sind beide /data/centos ;

docker run -it --name centos_1 -v /data/centos:/data/centos centos /bin/bash

2. Erstellen Sie einen zweiten Container und binden Sie ihn an den ersten Container. --volumes-from centos_1 bindet das Mount-Verzeichnis des aktuellen Containers an den Container centos_1, wodurch eine Datensynchronisierung zwischen den Containern erreicht wird.

docker run -it --name centos_2 --volumes-from centos_1 centos /bin/bash

3. Nun erstellen wir einen dritten Container und binden ihn an den zweiten Container centos_2

docker run -it --name centos_3 --volumes-from centos_2 centos /bin/bash

Als nächstes erstellen wir eine Datei im Verzeichnis /data/centos in jedem Container

  • Erstellen Sie die Datei main.java im Verzeichnis /data/centos des Hostcomputers
  • Erstellen Sie die Datei centos_1.java im Verzeichnis /data/centos des Containers centos_1
  • Erstellen Sie die Datei centos_2.java im Verzeichnis /data/centos des Containers centos_2
  • Erstellen Sie die Datei centos_3.java im Verzeichnis /data/centos des centos_3-Containers

Führen Sie abschließend den Befehl ls im Verzeichnis /data/centos in den vier Umgebungen aus. Sie können die von allen Containern erstellten Dateien sehen. Auf diese Weise können wir eine Datensynchronisierung zwischen Containern erreichen.

[root@259efdc362b4 centos]# ls
centos_1.java centos_2.java centos_3.java main.java

Dies ist das Ende dieses Artikels über Docker-Container-Datenvolumes – benannte Mounts und anonyme Mounts. Weitere relevante Inhalte zu Docker-Container-Datenvolumes finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Spezifische Verwendung von Docker Anonymous Mount und Named Mount
  • Implementierung benannter und anonymer Mounts in Docker

<<:  Zusammenfassung der Wissenspunkte zum Ereignismodul in Node.js

>>:  MySQL lernen: Drei Paradigmen für Anfänger

Artikel empfehlen

Detaillierte Erläuterung der Js-Klassenkonstruktion und Vererbungsfälle

Die Definition und Vererbung von Klassen in JS si...

JS berechnet die Gewinnwahrscheinlichkeit basierend auf dem Preisgewicht

Inhaltsverzeichnis 1. Beispielszenario 1.1. Legen...

Zusammenfassung einiger gängiger Verwendungen von Refs in React

Inhaltsverzeichnis Was sind Refs 1. Referenzen vo...

So erstellen Sie eine lnmp-Umgebung im Docker

Erstellen eines Projektverzeichnisses mkdir php E...

Zusammenfassung der Tipps zur Verwendung von coalesce() in MySQL

Vorwort Kürzlich habe ich zufällig MySQLs Coalesc...

JS implementiert einfachen Kalendereffekt

In diesem Artikel wird der spezifische JS-Code zu...

Docker-Installations- und Konfigurationsschritte für RabbitMQ

Inhaltsverzeichnis Bereitstellung auf einem einze...

Welche magischen Anwendungen haben CSS-Filter?

Hintergrund Grundlegende Konzepte CSS filter wend...

js, um den Effekt eines Lichtschalters zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

HTML-Optimierung beschleunigt Webseiten

Offensichtliches HTML, verstecktes „öffentliches ...

Tutorial zur Installation von VMware Workstation 14 Pro unter Ubuntu 16.04

In diesem Artikel wird die spezifische Methode zu...