Vorwort Beim Einsatz von Docker in einer Produktionsumgebung müssen Daten häufig zwischen mehreren Containern gespeichert oder geteilt werden, was zwangsläufig Containerdatenverwaltungsvorgänge mit sich bringt. Methode 1: Docker-Befehl cp Docker CP: wird zum Kopieren von Daten zwischen dem Container und dem Host verwendet. Syntax # Dateien im Container zum Host kopieren Docker cp [OPTIONEN] CONTAINER:SRC_PATH DEST_PATH|- # Kopiere die Host-Datei in den Container docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH OPTIONS-Beschreibung: -L: Links zwischen Quelle und Ziel beibehalten Anwendungsbeispiel: Vom Host zum Container Container zum Hosten Hinweis: Obwohl diese Methode auch für die Verwaltung verwendet werden kann, werden die Daten nicht integriert und grundsätzlich nicht verwendet. Sie dienen nur zum Verständnis. Methode 2: Docker-Datenvolumen 1. Was ist Volumen Um Docker Volume zu verstehen, müssen wir zunächst wissen, wie das Dateisystem von Docker funktioniert. Ein Docker-Image besteht aus mehreren Dateisystemen (schreibgeschützten Ebenen). Wenn wir einen Container starten, lädt Docker die Image-Ebene und fügt darüber eine Lese-/Schreibebene hinzu. Wenn ein laufender Container eine vorhandene Datei ändert, wird die Datei von der schreibgeschützten Ebene unter der Schreib-Lese-Ebene in die Schreib-Lese-Ebene kopiert. Die schreibgeschützte Version der Datei ist noch vorhanden, wurde jedoch durch die Kopie der Datei in der Schreib-Lese-Ebene verborgen. Wenn Sie den Docker-Container löschen und mit dem Image neu starten, gehen die vorherigen Änderungen verloren. In Docker wird die Kombination aus einer schreibgeschützten Ebene und einer darüber liegenden Lese-/Schreibebene als Union-File-System bezeichnet. Um Daten zu speichern (persistent) und zwischen Containern auszutauschen, hat Docker das Volume-Konzept vorgeschlagen. Einfach ausgedrückt ist ein Volume ein Verzeichnis oder eine Datei, die das standardmäßige Union-Dateisystem umgeht und auf dem Hostcomputer als normale Datei oder Verzeichnis existiert. 2. Eigenschaften von Datenmengen • Datenmengen können zwischen Containern geteilt und wiederverwendet werden • Änderungen am Datenvolumen werden sofort wirksam • Aktualisierungen des Datenvolumens haben keinen Einfluss auf das Bild • Standardmäßig bleiben Datenvolumes bestehen, auch wenn der Container gelöscht wird 3. Datenvolumenbezogene Vorgänge
Erstellen eines Datenvolumens Verwendung: Docker-Volume erstellen [OPTIONEN] [VOLUME] Erstellen eines Volumes Optionen: -d, --driver string Gibt den Namen des Datenträgertreibers an (Standard: „local“) --label list Metadaten für ein Volume festlegen -o, --opt map Treiberspezifische Optionen setzen (Standard map[]) Alle Datenmengen anzeigen Verwendung: Docker-Volume ls [OPTIONEN] Auflisten von Bänden Aliase: ls, Liste Optionen: -f, --filter filter Filterwerte bereitstellen (zB 'dangling=true') --format string Hübsches Drucken von Datenträgern mithilfe einer Go-Vorlage -q, --quiet Nur Datenträgernamen anzeigen Details zu einem oder mehreren Volumes anzeigen Verwendung: Docker-Volume-Inspect [OPTIONEN] VOLUME [VOLUME ...] Detaillierte Informationen zu einem oder mehreren Volumes anzeigen Optionen: -f, --format string Formatiert die Ausgabe mit der angegebenen Go-Vorlage Löschen eines einzelnen Datenvolumens Verwendung: Docker-Volume rm [OPTIONEN] VOLUME [VOLUME ...] Entfernen Sie ein oder mehrere Volumes. Sie können kein Volume entfernen, das von einem Container verwendet wird. Aliase: rm, entfernen Optionen: -f, --force Erzwingt das Entfernen eines oder mehrerer Volumes Alle ungenutzten Datenträger löschen Verwendung: Docker-Volume-Prune [OPTIONEN] Entfernen Sie alle nicht verwendeten lokalen Volumes Optionen: --filter filter Filterwerte bereitstellen (zB 'label=<label>') -f, --force Keine Bestätigung anfordern Anwendungsbeispiel: 4. Datenvolumennutzung Die Verwendung von Datenvolumes ähnelt dem Mounten eines Verzeichnisses oder einer Datei in Linux. Benutzer können Container mit Datenvolumes erstellen, indem sie die Optionen --volume/-v oder --mount von Docker Run verwenden, aber die beiden Parameter können nicht gleichzeitig verwendet werden. Im Allgemeinen ist --mount expliziter und ausführlicher. Der größte Unterschied besteht darin, dass die -v-Syntax alle Optionen in einem Feld kombiniert, während die --mount-Syntax sie trennt. Für Anfänger wird die Verwendung von --mount empfohlen, da dies einfacher zu verstehen ist. Verwendung: docker run [OPTIONEN] IMAGE [BEFEHL] [ARG…] Ausführen eines Befehls in einem neuen Container Optionen: --volume list Ein Volume per Bind mounten --volume-driver string Optionaler Volume-Treiber für den Container --volumes-from list Volumes aus den angegebenen Containern mounten --mount mount Eine Dateisystemeinbindung an den Container anhängen 4.1 - Details zur Datenträgernutzung Der Parameter --volume (kurz -v) kann lediglich ein Bind-Mount erstellen.
4.1.1 Mounten nach Datenträgernamen docker run -itd -v VOLUME_NAME:CONTAINER-DIR IMAGE [BEFEHL] [ARG…] Beispiel: Mounten Sie das Datenvolume my_vol im Verzeichnis /data/docker/volume/my_vol des Containers. docker run -itd --name=vol1_ubuntu -v mein_vol:/data/docker/volume/mein_vol ubuntu /bin/bash Hinweis: Wenn das Datenvolumen my_vol vorhanden ist, wird es direkt gemountet. Wenn es nicht vorhanden ist, erstellt Docker das Datenvolumen automatisch und mountet es dann. 4.1.2 Mounten Sie gemäß dem absoluten Pfad des Hostdateiverzeichnisses docker run -it -v ABSOLUTE-HOST-DIR:CONTAINER-DIR IMAGE [BEFEHL] [ARG…] Beispiel: Mounten Sie das Host-Dateiverzeichnis /opt/common/docker/volumes/my_vol2 in das Verzeichnis /data/docker/volumes/my_vol des Containers. docker run -itd --name=vol2_ubuntu -v /opt/common/docker/volumes/my_vol2:/data/docker/volume/my_vol ubuntu /bin/bash Hinweis: Das Dateiverzeichnis des Hostcomputers muss ein absoluter Pfad sein. 4.1.3 Mounten gemäß dem absoluten Pfad der Hostdatei docker run -itd -v VOLUME_NAME:CONTAINER-DIR IMAGE [BEFEHL] [ARG…] Beispiel: Mounten Sie die Hostdatei ~/.bash_history in die Datei /.bash_history des Containers. docker run -itd --name=vol3_ubuntu -v ~/.bash_history:/.bash_history ubuntu /bin/bash 4.1.4 Einbinden anonymer Volumes Wenn der Parameter -v keine hostbezogenen Volume-Informationen hinzufügt, erstellt Docker ein anonymes Volume zum Mounten. docker run -itd -v CONTAINER-DIR IMAGE [BEFEHL] [ARG…] Beispiel: Mounten Sie das anonyme Volume im Verzeichnis /data/docker/volume/my_vol des Containers. docker run -itd --name=vol4_ubuntu -v /data/docker/volume/my_vol ubuntu /bin/bash 4.1.5 -v Das umfassende Operationsbeispiel lautet wie folgt: docker run -itd --name=vol_ubuntu \ -v mein_vol:/data/docker/volume/mein_vol1:ro \ -v /opt/common/docker/volumes/my_vol2:/data/docker/volume/my_vol2:rw \ -v /opt/common/docker/volumes/my_vol3.txt:/data/docker/volume/my_vol3.txt \ -v /data/docker/volume/my_vol4 \ ubuntu /bin/bash 4.2 --mount Nutzungsdetails --mount: besteht aus mehreren durch Kommas getrennten Schlüssel-Wert-Paaren <Schlüssel>=<Wert>. Die Reihenfolge der Schlüssel ist beliebig.
Für die Option --mount bietet Docker derzeit drei verschiedene Arten von Datenvolumes zum Mounten vom Host in den Container: Volume, Bind und tmpfs. Die schematischen Darstellungen der drei Methoden sind unten dargestellt: 4.2.1 Benannte Einhängung Normale Datenträger (dieser Typ ist der Standard), die Teil des von Docker verwalteten Hostdateisystems sind und sich standardmäßig im Verzeichnis /var/lib/docker/volumes befinden;
Codebeispiel: Docker-Dienst erstellen – mounten Sie „Typ=Volume, Quelle=<VOLUME-NAME>, Ziel=<CONTAINER-PFAD>, Volume-Treiber=lokal, Volume-Opt=Typ=NFS, Volume-Opt=Gerät=<NFS-Server>:<NFS-Pfad>, „Volume-Opt=o=Adresse=<NFS-Adresse>, Vers=4, Soft, Timeo=180, BG, TCP, RW“ – Name meines Dienstes <IMAGE> 4.2.2Bindmount Binden Sie Datenträger, Dateien oder Verzeichnisse an die Bereitstellung, sodass sie überall auf dem Hostsystem gespeichert werden können.
*Hinweis: Diese Verwendung wird in Dockerfile nicht unterstützt, da Dockerfile zum Portieren und Teilen vorgesehen ist. Allerdings sind die Pfadformate verschiedener Betriebssysteme unterschiedlich und werden deshalb derzeit nicht unterstützt. Codebeispiel: docker run -d -it --name devtest --mount Typ=binden, Quelle="$(pwd)"/Ziel, Ziel=/app --mount Typ=binden, Quelle="$(pwd)"/Ziel, Ziel=/app2, schreibgeschützt, Bind-Propagation=rslave nginx:latest 4.2.2 tmpfs-Mount Temporäre Datenträger werden gemountet und im Speicher des Hostsystems gespeichert, jedoch nicht in das Dateisystem des Hosts geschrieben.
Hinweis: Diese Funktion ist nur verfügbar, wenn Docker unter Linux ausgeführt wird. Codebeispiel: docker run -d -it --name tmptest --mount Typ=tmpfs, Ziel=/app, tmpfs-Größe=1024, tmpfs-Modus=1770 nginx: neueste 4.3 Unterschied zwischen -v und --mount (1) --mount kann die Erstellung von Datenträgern für Cluster-Dienste unterstützen, -v hingegen nicht. (2) Mounten Sie eine Datei oder ein Verzeichnis. Wenn es vor dem Mounten nicht existiert, wird es von -v docker automatisch erstellt, von --mount hingegen nicht (es wird ein Fehler gemeldet). 4.4 Ergänzende Hinweise (1) (--mount beinhaltet grundsätzlich die optionalen Attribute von --volume) Die offizielle Empfehlung ist, die Methode --mount zu verwenden. Der Originaltext lautet wie folgt: Auch wenn keine Pläne bestehen, (2) Link zum offiziellen Dokument: https://docs.docker.com/storage/volumes/ https://docs.docker.com/engine/reference/commandline/service_create/ Methode 3: Docker-Datenvolumencontainer Ein Datenvolumencontainer ist ebenfalls ein Container, sein Zweck besteht jedoch darin, Datenvolumen bereitzustellen, die andere Container mounten können. Wenn Benutzer kontinuierlich aktualisierte Daten zwischen mehreren Containern teilen müssen, ist die Verwendung eines Datenvolumencontainers die einfachste Möglichkeit. 1. Grundsätzliche Verwendung von Datenträgercontainern 1.1 Erstellen eines Datenträgercontainers Erstellen Sie einen Datenträgercontainer namens dbdata, erstellen Sie darin einen Datenträger und mounten Sie ihn in das Verzeichnis /dbdata: docker run -it -v /dbdata --name db_data ubuntu 1.2 Montage anderer Container Verwenden Sie --volumes-from in anderen Containern, um die Datenvolumes im dbdata-Container zu mounten docker run -it --volumes-from db_data --name db1 ubuntu docker run -it --volumes-from db_data --name db2 ubuntu db1 und db2 teilen Daten über db_data 2. Verwenden Sie Datenvolumencontainer zum Sichern, Wiederherstellen und Migrieren von Datenvolumen Datenvolumes können zum Sichern, Wiederherstellen und Migrieren von Daten verwendet werden. 2.1 Datensicherung Verwenden Sie zunächst das Flag --volumes-from, um einen Container zu erstellen, der das Containervolume dbdata mountet und das aktuelle /backup-Verzeichnis vom lokalen Host in den Container mountet. Der Befehl lautet wie folgt: sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata Nachdem der Container gestartet wurde, wird der Tar-Befehl verwendet, um das DBData-Volume im lokalen Verzeichnis /backup/backup.tar zu sichern. 2.2 Wiederherstellung Wenn Sie Daten in einem Container wiederherstellen möchten, erstellen Sie zuerst einen Container dbdata2 mit einem Datenvolumen. sudo docker run -v /dbdata --name dbdata2 ubuntu /bin/bash Erstellen Sie dann einen weiteren Container, mounten Sie den dbdata2-Container und verwenden Sie untar, um die Sicherungsdatei in das gemountete Container-Volume zu dekomprimieren. sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar Haftungsausschluss: Der Inhalt dieses Blogbeitrags ist rein persönliches Verständnis. Wenn Sie Einwände haben, kommentieren Sie bitte. Damit ist dieser Artikel über die Dateninteraktion zwischen Docker-Containern und dem Host abgeschlossen. Weitere Informationen zur Dateninteraktion zwischen Docker-Containern und dem Host finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erklärung der neuen Funktion ROLE in MySQL 8
Inhaltsverzeichnis Alle Speicher-Engines anzeigen...
Die Warnhinweise in diesem Artikel haben nichts m...
React ist eine JavaScript-Bibliothek zum Erstelle...
Der folgende Code führt MySQL ein, um einige Feld...
In diesem Artikel wird hauptsächlich die Implemen...
Zusammenfassen Dieser Artikel endet hier. Ich hof...
1. Fügen Sie einen Benutzer hinzu . Verwenden Sie...
Vorwort Vor kurzem bin ich auf ein interessantes ...
Inhaltsverzeichnis Vorne geschrieben Umgebungsber...
1. js schützt hasOwnProperty nicht vor unrechtmäß...
SQL-Methode zum Berechnen der Zeitstempeldifferen...
Vorwort MySQL unterstützt viele Arten von Tabelle...
Docker-Installation (Alibaba Cloud Server) Offizi...
Vorwort Dieser Artikel stellt hauptsächlich den r...
1. Hintergrund Netplan ist ein neues Befehlszeile...