Zusammenfassung der Dateninteraktion zwischen Docker-Container und Host

Zusammenfassung der Dateninteraktion zwischen Docker-Container und Host

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

Verwendung: Docker-Volume-Befehl
Verwalten von Volumes
Befehle:
erstellen Erstellen Sie ein Volume
inspect Anzeige detaillierter Informationen zu einem oder mehreren Volumes
ls Volumes auflisten
prune Entfernen Sie alle ungenutzten lokalen Volumes
rm Entfernen Sie ein oder mehrere Volumes

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.

Befehlsformat:
-v [[HOST-OPTIONEN:]CONTAINER-VERZ[:OPTIONEN]]]
HOST-OPTIONEN:
VOLUME_NAME (Name des Datenträgers)
ABSOLUTE-HOST-DIR (absoluter Pfad des Host-Dateiverzeichnisses)
ABSOLUTE-HOST-FILE (absoluter Pfad der Hostdatei) (Wenn dieser leer ist, wird das anonyme Datenvolumen gemountet)
Optionen:
rw Lesen/Schreiben (Standard)
ro Nur lesen

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.

Befehlsformat:
--mount Typ=MOUNT-TYP,<Schlüssel>=<Wert>

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;

--mount Typ=Volume,Quelle=<VOLUME-NAME>,Ziel=<CONTAINER-PFAD>,Volume-Driver=<TREIBERNAME>,Volume-Opt=<OPTION>=<WERT>,schreibgeschützt

<Schlüssel>=<Wert> Beschreibung:
Quelle: Quellpfad des Datenträgers, das Schlüsselwort kann Quelle oder src sein, wenn dieser Parameter nicht vorhanden ist, erstellt Docker automatisch eine anonyme Datenträgereinbindung
VOLUME-NAME: Name des Datenträgers
Ziel: der Zielpfad des Datenträgers. Das Schlüsselwort kann „destination“, „dst“ oder „target“ sein.
CONTAINER-PATH: Der Mount-Pfad des Datenträgers im Container
volume-driver: gibt den Datenträgertreiber an, der Standardwert ist „local“
DRIVER-NAME: Treibername
volume-opt: optional, Datenvolumen-Treiberparameteroptionen
OPTION: Schlüsselwert
WERT: Wert
readonly: optional, legen Sie fest, dass das im Container zu mountende Datenvolumen nur schreibgeschützt ist, die Standardeinstellung ist lesbar und beschreibbar

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.

--mount Typ=Binden,Quelle=<HOST-PFAD>,Ziel=<CONTAINER-PFAD>,Bind-Propagation=<PG-TYP>,schreibgeschützt

<Schlüssel>=<Wert> Beschreibung:
Quelle: Quellpfad des Datenträgers, das Schlüsselwort kann Quelle oder src sein. Stellen Sie vor der Ausführung sicher, dass die Datei oder das Dateiverzeichnis vorhanden ist, da sonst ein Fehler auftritt.
HOST-PATH: Der absolute Pfad der Hostdatei oder des Hostverzeichnisses
Ziel: der Zielpfad des Datenträgers. Das Schlüsselwort kann „destination“, „dst“ oder „target“ sein.
CONTAINER-PATH: Der Mount-Pfad des Datenträgers im Container
Bind-Propagation: optional,
PG-TYP: Optionale Werte: rprivate, private, rshared, shared, rslave, slave.
readonly: optional, legen Sie das Datenvolumen fest, das im Container mit schreibgeschützten Berechtigungen bereitgestellt werden soll. Der Standardwert ist lesbar und beschreibbar, daher wird dieser Parameter nicht hinzugefügt.

*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.

--mount Typ=tmpfs, Ziel=<CONTAINERPFAD>, tmpfs-size=<GRÖSSENWERT>, tmpfs-mode=<MODUSWERT>, schreibgeschützt

<Schlüssel>=<Wert> Beschreibung:
Ziel: der Zielpfad des Datenträgers. Das Schlüsselwort kann „destination“, „dst“ oder „target“ sein.
CONTAINER-PATH: Der Mount-Pfad des Datenträgers im Container
tmpfs-size: Optional, die Größe des tmpfs-Mounts (in Bytes), der Standardwert in Linux ist unendlich.
SIZE-VALUE: Wert
tmpfs-Modus: Optionaler, oktaler Dateimodus von tmpfs, der Standardwert in Linux ist „1777“.
MODE-VALUE: Wert

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, --volume zu verwerfen, wird die Verwendung von --mount empfohlen.

(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:
  • Lösen Sie das Problem, dass Docker-Container sofort nach dem Start beendet werden
  • Detaillierte Erläuterung des Konfigurationsprozesses des Docker-Container-Netzwerkports
  • Analyse des Implementierungsprozesses der Docker-Container-Orchestrierung
  • Erstellen und Verwenden von Docker-Datenvolumencontainern
  • Detaillierte Erklärung der Datenmengen von Docker-Containern
  • So kommunizieren Sie zwischen dem WIN10-System und der internen Container-IP von Docker

<<:  Detaillierte Erklärung der neuen Funktion ROLE in MySQL 8

>>:  Vue und React im Detail

Artikel empfehlen

Vor- und Nachteile gängiger MySQL-Speicher-Engines

Inhaltsverzeichnis Alle Speicher-Engines anzeigen...

So legen Sie schnell den Dateipfad-Alias ​​in React fest

React ist eine JavaScript-Bibliothek zum Erstelle...

Detaillierte Erklärung des Vue-Plugins

Zusammenfassen Dieser Artikel endet hier. Ich hof...

Zusammenfassung zum Hinzufügen von Root-Berechtigungen für Benutzer in Linux

1. Fügen Sie einen Benutzer hinzu . Verwenden Sie...

So aktualisieren Sie die Ansicht synchron nach Datenänderungen in Vue

Vorwort Vor kurzem bin ich auf ein interessantes ...

SQL-Methode zum Berechnen der Zeitstempeldifferenz

SQL-Methode zum Berechnen der Zeitstempeldifferen...

Ein kurzes Verständnis der Unterschiede zwischen MySQL InnoDB und MyISAM

Vorwort MySQL unterstützt viele Arten von Tabelle...

So legen Sie eine statische IP für den Ubuntu 18.04-Server fest

1. Hintergrund Netplan ist ein neues Befehlszeile...