Detaillierte Erläuterung des Docker-Datenmanagements (Datenvolumes und Datenvolume-Container)

Detaillierte Erläuterung des Docker-Datenmanagements (Datenvolumes und Datenvolume-Container)

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.

Es gibt zwei Hauptmethoden zum Verwalten von Daten in Containern:

1. Datenvolumes: Daten im Container werden direkt der lokalen Hostumgebung zugeordnet; so erstellen Sie ein Datenvolume im Container und mounten das lokale Verzeichnis oder die Datei in das Datenvolume im Container.
2. Datenvolumencontainer: Verwenden Sie spezielle Container zur Verwaltung von Datenvolumen. So verwenden Sie Datenvolumencontainer, um Daten zwischen Containern und Hosts sowie zwischen Containern auszutauschen und um Datensicherung und -wiederherstellung zu implementieren.

Datenvolumen

Ein Datenvolumen ist ein spezielles Verzeichnis, das Containern zur Verfügung steht. Es bildet das Verzeichnis des Host-Betriebssystems direkt im Container ab, ähnlich dem Mount-Vorgang in Linux.

Datenvolumes können viele nützliche Funktionen bieten, beispielsweise:
1. Datenmengen können zwischen Containern geteilt und wiederverwendet werden, was den Datentransfer zwischen Containern effizient und bequem macht;
2. Änderungen an Daten im Datenvolumen werden sofort wirksam, unabhängig davon, ob der Vorgang im Container oder lokal erfolgt.
3. Aktualisierungen des Datenvolumens wirken sich nicht auf das Image aus und entkoppeln Anwendungen und Daten.
4. Das Volume bleibt bestehen, bis es von keinem Container mehr verwendet wird und sicher ausgehängt werden kann.

1. Erstellen Sie ein Datenvolumen im Container

Verwenden Sie beim Verwenden des Befehls „Docker Run“ das Flag -v, um ein Datenvolumen im Container zu erstellen. Wiederholen Sie das Flag -v mehrmals, um mehrere Volumes zu erstellen.

Erstellen Sie als Nächstes einen Webcontainer mit dem Image „training/webapp“ und erstellen Sie ein Datenvolume, das im Verzeichnis „/webapp“ des Containers bereitgestellt wird:

$ docker run -d -P --name web -v /webapp training/webapp python app.py

-P ist der Port, der den Containerdienst verfügbar macht und automatisch einem temporären Port auf dem lokalen Host zugeordnet wird.

2. Mounten Sie ein Host-Verzeichnis als Datenvolume

Sie können auch das Flag -v verwenden, um ein vorhandenes lokales Verzeichnis anzugeben, das als Datenträger in den Container eingebunden werden soll (empfohlen).

$ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

Der obige Befehl lädt das Verzeichnis /src/webapp des Hosts in das Verzeichnis /opt/webapp des Containers.

Diese Funktion ist beim Testen sehr praktisch. Beispielsweise können Benutzer einige Programme oder Daten in einem lokalen Verzeichnis ablegen und sie dann im Container ausführen und verwenden. Darüber hinaus muss der Pfad zum lokalen Verzeichnis ein absoluter Pfad sein. Wenn das Verzeichnis nicht existiert, erstellt Docker es automatisch.

Die Standardberechtigungen für über Docker gemountete Volumes sind Lesen/Schreiben (rw), und Benutzer können über ro auch schreibgeschützte Volumes angeben:

$ docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

Nach dem Hinzufügen von :ro können die Daten im gemounteten Datenträger im Container nicht mehr geändert werden.

3. Mounten Sie eine lokale Hostdatei als Datenvolume

Das Flag -v kann auch verwendet werden, um einzelne Dateien vom Host als Datenvolumes in den Container einzubinden (nicht empfohlen).

$ docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

Dadurch wird der im Container eingegebene Befehlsverlauf aufgezeichnet.

Wenn Sie eine Datei direkt in einen Container einbinden und dabei Dateibearbeitungstools wie vi oder sed --in-place verwenden, kann es dazu kommen, dass sich der Datei-Inode ändert. Ab Docker 1.1.0 führt dies zu einer Fehlermeldung. Daher wird empfohlen, das Verzeichnis, in dem sich die Datei befindet, direkt zu mounten.

Datenvolumencontainer

Wenn Benutzer kontinuierlich aktualisierte Daten zwischen mehreren Containern teilen müssen, besteht die einfachste Möglichkeit darin, einen Datenvolumencontainer zu verwenden. Ein Datenvolumencontainer ist ebenfalls ein Container, sein Zweck besteht jedoch darin, Datenvolumen für die Einbindung anderer Container bereitzustellen.

Erstellen Sie zunächst einen Datenvolume-Container dbdata, erstellen Sie darin ein Datenvolume und mounten Sie es in /dbdata:

$ docker run -it -v /dbdata --name dbdata ubuntu

root@3ed94f279b6f:/#

Zeigen Sie das Verzeichnis /dbdata an:

root@3ed94f279b6f:/# ls

bin boot dbdata dev etc home lib lib64 media mnt opt ​​proc root run sbin srv sys tmp usr var

Sie können dann --volumes-from in anderen Containern verwenden, um die Datenvolumes im dbdata-Container zu mounten.

Erstellen Sie beispielsweise zwei Container, db1 und db2, und mounten Sie das Datenvolume aus dem dbdata-Container:

$ docker run -it --volumes-from dbdata --name db1 ubuntu

$ docker run -it --volumes-from dbdata --name db2 ubuntu

An diesem Punkt mounten die Container db1 und db2 beide dasselbe Datenvolumen in dasselbe /dbdata-Verzeichnis. Alle Schreibvorgänge, die von einem der drei Container in dieses Verzeichnis vorgenommen werden, können von den anderen Containern gesehen werden.

Erstellen Sie beispielsweise wie folgt eine Testdatei im dbdata-Container:

root@3ed94f279b6f:/# cd /dbdata

root@3ed94f279b6f:/dbdata# Touch-Test

root@3ed94f279b6f:/dbdata# ls

prüfen

Sehen Sie es sich im db1-Container an:

$ docker run -it --volumes-from dbdata --name db1 ubuntu

root@4128d2d804b4:/# ls

bin boot dbdata dev etc home lib lib64 media mnt opt ​​proc root run sbin srv sys tmp usr var

root@4128d2d804b4:/# ls dbdata/

prüfen

Sie können den Parameter --volumes-from mehrmals verwenden, um mehrere Volumes aus mehreren Containern bereitzustellen. Sie können auch Datenvolumes aus anderen Containern mounten, die bereits gemountete Containervolumes haben.

Der Container, der das Datenvolumen mit dem Parameter --volumes-from bereitstellt, muss nicht ausgeführt werden.

Wenn der gemountete Container (einschließlich dbdata, db1 und db2) gelöscht wird, wird das Datenvolumen nicht automatisch gelöscht. Möchte man ein Datenvolumen löschen, muss man beim Löschen des letzten Containers, der es noch einbindet, mit dem Kommando docker rm -v explizit angeben, dass der zugehörige Container gleichzeitig gelöscht werden soll.

Migrieren von Daten mithilfe von Datenvolumencontainern

Der Datenvolume-Container kann zum Sichern und Wiederherstellen der darin enthaltenen Datenvolumes verwendet werden, um eine Datenmigration durchzuführen.

Diese beiden Vorgänge werden unten beschrieben.

1. Sicherung

Verwenden Sie den folgenden Befehl, um die Datenvolumes im Datenvolume-Container dbdata zu sichern:

Kopieren Sie den Code wie folgt:
$ docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata

Erstellen Sie zunächst einen Container-Worker mit dem Ubuntu-Image. Verwenden Sie den Parameter --volumes-from dbdata, damit der Worker-Container das Datenvolume des dbdata-Containers (also das dbdata-Datenvolume) mounten kann, und verwenden Sie den Parameter -v $(pwd):/backup, um das lokale aktuelle Verzeichnis im Verzeichnis /backup des Worker-Containers zu mounten. Nachdem der Worker-Container gestartet wurde, wird der Befehl tar cvf /backup/backup.tar /dbdata verwendet, um den Inhalt von /dbdata in /backup/backup.tar im Container zu sichern, d. h. in backup.tar im aktuellen Verzeichnis des Hosts.

2. Wiederherstellung

Wenn Sie Daten in einem Container wiederherstellen möchten, können Sie die folgenden Schritte ausführen.

Erstellen Sie zunächst einen Container dbdata2 mit einem Datenvolumen:

$ docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

Erstellen Sie dann einen weiteren neuen Container, mounten Sie den dbdata2-Container und verwenden Sie untar, um die Sicherungsdatei in das gemountete Container-Volume zu dekomprimieren:

$ docker run --volumes-from dbdata2 -v $(pwd):/backup --name worker ubuntu bash

cd /dbdata

tar xvf /backup/backup.tar

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:
  • docker run -v mountet Datenvolumes abnormal und der Containerstatus wird immer neu gestartet
  • Docker mountet lokale Verzeichnisse und Datenvolumen-Container-Operationen
  • Analyse der Prinzipien und der Nutzung von Docker-Container-Datenvolumes
  • Eine kurze Zusammenfassung der Bereitstellung eines Docker-Container-Datenvolumens
  • Detaillierte Erläuterung der Container-Datenmengen und der Datenverwaltung in Docker
  • Detaillierte Einführung und Beispiele für Docker-Datenvolumes und -Datencontainer
  • Detaillierte Einführung in Docker-Datenvolumen und Datenvolumencontainer
  • Probleme mit dem benannten Mount und dem anonymen Mount des Docker-Container-Datenvolumens

<<:  MySQL-Methode zum Anzeigen der aktuell verwendeten Konfigurationsdatei my.cnf (empfohlen)

>>:  Detaillierte Erläuterung verschiedener Möglichkeiten zum Erstellen von Objekten und Objektmethoden in js

Artikel empfehlen

Vue+Element - benutzerdefinierte Abfragekomponente

In diesem Artikel wird hauptsächlich das Vue-Proj...

Vue implementiert Sternebewertung mit Dezimalstellen

In diesem Artikel wird der spezifische Code von V...

Zusammenfassung der Verwendung von clipboard.js

Inhaltsverzeichnis (1) Einleitung: (2) Zum Kopier...

Natives JS zur Implementierung eines Klickzahlenspiels

Native JS implementiert das Klickzahlenspiel zu I...

Mysql-Datumsformatierung und komplexe Datumsbereichsabfrage

Inhaltsverzeichnis Vorwort Anwendungsszenarios fü...

So importieren Sie CSS-Stile in externe HTML-Stylesheets

Der Link-In-Stil besteht darin, alle Stile in ein...

So zeigen Sie Bilder im TIF-Format im Browser an

Der Browser zeigt Bilder im TIF-Format an Code kop...

Mit JS ein kleines Flugzeugkriegsspiel implementieren

In diesem Artikelbeispiel wird der spezifische JS...

Lösen Sie das Problem beim Laden der Vektorkartenquelle in OpenLayers 3

1. Vektorkarte Vektorgrafiken verwenden gerade Li...

So ändern Sie die Zeichensatzkodierung in MySQL 5.5/5.6 unter Linux auf UTF8

1. Melden Sie sich bei MySQL an und verwenden Sie...

Front-End-KI-Schnitttipps (Erfahrung)

Das AI-Bildschneiden muss mit PS koordiniert werd...

Detaillierte Erläuterung der logischen Architektur von MySQL

1. Gesamtarchitekturdiagramm Im Vergleich zu ande...

Der beste Weg, ein JAR-Paketprojekt unter einem Centos7-Server zu starten

Vorwort Jeder weiß, wie man ein JAR-Paket unter L...