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

Beispielanalyse von MySQL-Start- und Verbindungsmethoden

Inhaltsverzeichnis So starten Sie mysqld Methode ...

So erstellen Sie eine lnmp-Umgebung im Docker

Erstellen eines Projektverzeichnisses mkdir php E...

Tomcat Server Erste Schritte Super ausführliches Tutorial

Inhaltsverzeichnis 1. Einige Konzepte von Tomcat ...

Vue verwendet Mixins zur Optimierung von Komponenten

Inhaltsverzeichnis Mixins-Implementierung Zusamme...

So ziehen Sie das Docker-Image herunter, um die Version anzuzeigen

Um die Version und das Tag des Bildes anzuzeigen,...

Warum MySQL die Verwendung von Nullspalten mit Standardwerten nicht empfiehlt

Die Antwort, die Sie oft hören, ist, dass die Ver...

Lösung für das Problem, dass der Z-Index in CSS3 nicht wirksam wird

Ich habe vor kurzem eine Kombination aus CSS3 und...

Neue Funktionen in MySQL 8.0 - Einführung in Check Constraints

Inhaltsverzeichnis Vorwort Einschränkungen prüfen...

Vues Render-Funktion

Inhaltsverzeichnis 1. Knoten, Bäume und virtuelle...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.27

Das Installationstutorial für MySQL 5.7.27 wird w...