So verwenden Sie Volume zum Übertragen von Dateien zwischen Host und Docker-Container

So verwenden Sie Volume zum Übertragen von Dateien zwischen Host und Docker-Container

Ich habe zuvor einen Artikel über die Dateiübertragung zwischen Docker-Containern und lokalen Maschinen geschrieben. Diese Methode ist jedoch relativ umständlich. Nachdem ich die offiziellen Dokumente zur Datenverwaltung überprüft hatte, stellte ich fest, dass die Verwendung eines Volumes zur Erzielung einer Dateiübertragung zwischen dem Host und dem Container effizienter ist. Tatsächlich besteht dies darin, das lokale Verzeichnis im Container zu mounten. Es gibt drei offizielle Methoden: Daten in Docker verwalten,

Hier wird nur die Verwendung von Volumes vorgestellt: Verwenden von Volumes

1. Verwenden Sie Volume, um Dateien zwischen dem Host und dem Container zu übertragen.

In der offiziellen Dokumentation können Sie nachlesen, dass Sie mit dem folgenden Befehl ein Volume erstellen können:

Erstellen Sie ein Volume:

$ Docker-Volume erstellen my-vol

Beachten Sie, dass dieser Befehl nicht für alle Docker-Versionen verfügbar ist:

Um diesen Befehl verwenden zu können, müssen sowohl die Client- als auch die Daemon-API mindestens 1.21 sein. Verwenden Sie den Befehl „Docker Version“ auf dem Client, um die Versionen Ihrer Client- und Daemon-API zu überprüfen.

Nach der Erstellung können Sie detaillierte Informationen einsehen:

$ Docker-Volume prüfen my-vol 

Beachten Sie, dass das diesem Einhängepunkt entsprechende Verzeichnis das Verzeichnis ist, das wir zum Übertragen von Dateien zwischen dem Host und dem Container verwenden.

Anschließend können Sie das Volume verwenden, wenn Sie einen Container mit „run“ starten:

Sie können sehen, dass das gerade erstellte Datenvolumen über den Befehl -v im Hostdata-Verzeichnis im Container bereitgestellt wird. Wenn wir zu diesem Zeitpunkt Dateien zum Hostdata-Verzeichnis im Container hinzufügen, können wir sie auf dem Host in /var/lib/docker/volumes/my-vol/_data sehen. Wenn wir Dateien auf dem Host zu diesem Verzeichnis hinzufügen, können wir sie auch in den Hostdata des Containers sehen.

Ich habe die nginx-Datei in das für den Austausch verwendete Verzeichnis auf dem Host kopiert und kann sie nach dem Aufrufen des Containers auch im Hostdata-Verzeichnis anzeigen:

Kopieren Sie die Datei auf ähnliche Weise in das Hostdata-Verzeichnis im Container und Sie können sie auf dem Host unter /var/lib/docker/volumes/my-vol/_data anzeigen.

Hier erstelle ich eine Datei „Testdatei“ im Container und schreibe hinein: „Dies ist ein Container-Schreibvorgang!“, gehe dann zurück zum Host, um sie anzuzeigen, und verwende vim im Host, um ihr Folgendes hinzuzufügen: „Dies ist ein Host-Schreibvorgang!“ und gehe zurück zum Container, um sie anzuzeigen.

2. Datenvolumencontainer verwenden.

Ich habe Leute gesehen, die Datenvolumencontainer verwenden, um Daten zwischen mehreren Containern zu teilen. Der Prozess läuft wie folgt ab:

1. Erstellen Sie zunächst einen Datenvolumencontainer dbdata, erstellen Sie darin ein Datenvolumen und mounten Sie es in /bdata:

Sie können Docker Volume ls verwenden, um das Volume mit einem zufälligen Namen anzuzeigen.

2. Anschließend können Sie --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 die Datenvolumes aus dem dbdata-Container:

3. Zu diesem Zeitpunkt sind alle Schreibvorgänge im Verzeichnis /dbdata in jedem der drei Container auch in den anderen Containern sichtbar.

In der Abbildung wird die Testdatei im dbdata-Container erstellt und in „dbdata-Container schreiben!“ geschrieben. Anschließend wird sie im db1-Container „db1-Container schreiben!“ angezeigt und beschrieben. Anschließend wird sie im db2-Container „da2-Container schreiben!“ angezeigt und beschrieben. Abschließend wird sie wieder im dbdata-Container angezeigt.

4. Anschließend können Sie auch mehrere Datenvolumes über mehrere -volumes-from mounten, außerdem werden Methoden zur Sicherung und Wiederherstellung bereitgestellt, die im Internet in großer Zahl zu finden sind.

3. Warum keine Datenvolumencontainer verwenden?

Ich habe viele Artikel über Datenvolumencontainer gesehen und sie sind alle ähnlich. Dann habe ich nochmal drüber nachgedacht und bin zu dem Schluss gekommen, dass es gar nicht nötig ist, ein Datenvolumen zu verbrauchen (vielleicht habe ich da auch nicht gut genug nachgedacht).

Wie oben erwähnt, wird der Datenvolumencontainer verwendet, um Daten zwischen mehreren Containern zu teilen. Diese Methode kann jedoch durch das Mounten desselben lokalen Verzeichnisses erreicht werden. Beispielsweise kann ich das im ersten Schritt erstellte Datenvolume my-vol sowohl in den Containern db3 als auch db4 mounten.

In der Abbildung habe ich das Datenvolumen my-vol auf db3 und db4 gemountet und konnte dann die vorherigen Datendateien darin finden. Ich habe die Testdatei in den db4-Container geschrieben und sie auch im db3-Container angezeigt.

Das heißt, ich kann durch das Mounten eines Datenvolumes auch Daten in mehreren Containern teilen und die im Hostverzeichnis hinzugefügten Dateien können auch in allen Containern angezeigt werden. Wenn Sie ein Backup erstellen möchten, können Sie den Ordner einfach lokal auf den Host kopieren, was bequemer ist.

4. Warum Datenvolumencontainer verwenden?

Der Datenvolumencontainer hat jedoch noch eine weitere gute Funktion, nämlich das lokale Verzeichnis anzugeben, das gemountet werden soll. Im ersten Punkt erstellen wir ein Datenvolumen mit dem Namen my-vol. Das Verzeichnis, in dem das Datenvolumen lokal gespeichert ist, lautet: /var/lib/docker/volumes/my-vol/_data. Es ist ersichtlich, dass dieser Name sehr lang und unpraktisch zu handhaben ist. Der Datenvolumencontainer kann verwendet werden, um dieses Problem zu lösen.

Ich habe beispielsweise ein Verzeichnis auf dem Host speziell zum Speichern von Dateien für die Interaktion zwischen dem Host und dem Container erstellt. Das heißt, wenn ich in Zukunft Dateien in den Container übertragen möchte, kann ich die Dateien einfach in dieses Verzeichnis kopieren:

Ich habe in der offiziellen Dokumentation keinen Befehl gefunden, mit dem man beim Erstellen eines Datenvolumes mit „Docker Volume Create“ das dem Volume entsprechende lokale Verzeichnis angeben kann (vielleicht habe ich nicht genug gelesen).

Ich möchte aber nur das Verzeichnis /usr/local/datadb verwenden. Was soll ich tun? An dieser Stelle kommt die Rolle des Datenvolumencontainers ins Spiel. Sie können einen Datenvolumencontainer erstellen und das Verzeichnis auf dem Datenvolumencontainer mounten:

In der Abbildung habe ich einen sogenannten Datenvolumencontainer erstellt und den Parameter -v verwendet, um das Verzeichnis /usr/local/datadb des Hosts darin zu mounten. Dann habe ich im Container eine Datei testfile erstellt, „HAHAHAHA“ hineingeschrieben und sie dann auf dem Host angezeigt.

Wenn dann andere Container erstellt werden, können Sie –volumes-from verwenden, um den Datenvolumencontainer zu mounten. Wenn Sie Dateien in den Container übertragen möchten, kopieren Sie sie einfach in das Verzeichnis /usr/local/datadb. Wenn der Container umgekehrt Dateien auf den Host überträgt, kopieren Sie sie einfach in das Mount-Verzeichnis im Container.

Weisen Sie zum Sichern einfach dem Host /usr/local/datadb eine Kopie zu und mounten Sie diese zur Wiederherstellung erneut.

Aber es gibt ein Problem. Alle oben genannten Volume-Mounting-Vorgänge verwenden den Befehl „run“, um einen neuen Container zu erstellen. Ich habe lange gesucht und nur einen Artikel dazu gefunden, den ich aber nicht überprüft habe. Wenn Sie interessiert sind, können Sie ihn sich ansehen: https://www.jb51.net/article/157179.htm

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:
  • Der Unterschied zwischen VOLUME und docker -v in Dockerfile
  • Docker-Volumes-Dateizuordnungsmethode
  • Lösung für Gitlab-Volume-Berechtigungsprobleme bei der Installation von Windows Docker
  • So implementieren Sie die Docker-Volume-Montage
  • So fügen Sie einem laufenden Docker-Container dynamisch ein Volume hinzu
  • Löschvorgang für Docker-Volumes

<<:  Detaillierte Erklärung der Verwendung von Status in den drei Hauptattributen von React

>>:  Grafisches Tutorial zur MySQL 5.7-Konfiguration ohne Installation

Artikel empfehlen

Mysql 5.6.37 Winx64-Installation Dual-Version MySQL-Hinweise

Wenn MySQL Version 5.0 bereits auf dem Computer v...

So legen Sie die Breite und Höhe von HTML-Tabellenzellen fest

Beim Erstellen von Webseiten tritt häufig das Pro...

Lernen Sie schnell die MySQL-Grundlagen

Inhaltsverzeichnis SQL verstehen SELECT verstehen...

JavaScript-Entwurfsmuster, Befehlsmuster

Das Befehlsmuster ist ein Verhaltensentwurfsmuste...

Natives JS zum Implementieren der Seitenleiste zum Teilen

Dieser Artikel zeigt eine mit nativem JS implemen...

Wann sollte eine Website Anzeigen schalten?

Als ich vor kurzem mit einem Internet-Veteranen ü...

Architektur und Komponentenbeschreibung der privaten Docker-Bibliothek Harbor

In diesem Artikel wird die Zusammensetzung der Ha...

Analysieren Sie die Dauer von TIME_WAIT aus dem Linux-Quellcode

Inhaltsverzeichnis 1. Einleitung 2. Lassen Sie un...

Detaillierte Erklärung zu React Hooks

Inhaltsverzeichnis Was sind Hooks? Klassenkompone...

So verwenden Sie den Linux-Befehl „locate“

01. Befehlsübersicht Der Befehl „locate“ ist eige...

Vue implementiert ein Suchfeld mit einer Lupe

In diesem Artikel erfahren Sie, wie Sie mit Vue e...

Detaillierte Erklärung der Linux-CPU-Last und CPU-Auslastung

CPU-Last und CPU-Auslastung Beides kann bis zu ei...