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. 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. 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:
|
<<: MySQL-Methode zum Anzeigen der aktuell verwendeten Konfigurationsdatei my.cnf (empfohlen)
In diesem Artikel wird hauptsächlich das Vue-Proj...
Ich bin bei der Entwicklung eines Projekts schon ...
In diesem Artikel wird der spezifische Code von V...
Inhaltsverzeichnis (1) Einleitung: (2) Zum Kopier...
Native JS implementiert das Klickzahlenspiel zu I...
Inhaltsverzeichnis Vorwort Anwendungsszenarios fü...
Der Link-In-Stil besteht darin, alle Stile in ein...
Der Browser zeigt Bilder im TIF-Format an Code kop...
In diesem Artikelbeispiel wird der spezifische JS...
1. Vektorkarte Vektorgrafiken verwenden gerade Li...
Was ist JDK? Nun, wenn Sie diese Frage nicht kenn...
1. Melden Sie sich bei MySQL an und verwenden Sie...
Das AI-Bildschneiden muss mit PS koordiniert werd...
1. Gesamtarchitekturdiagramm Im Vergleich zu ande...
Vorwort Jeder weiß, wie man ein JAR-Paket unter L...