Heim >Betrieb und Instandhaltung >Docker >Was ist der Unterschied zwischen Docker-Volume und Mount?

Was ist der Unterschied zwischen Docker-Volume und Mount?

WBOY
WBOYOriginal
2022-03-08 16:53:053177Durchsuche

Der Unterschied zwischen „Docker-Volume“ und „Mount“ besteht darin: „Docker-Volume“ ist deklarativ, „Docker Engine“ selbst belegt ein bestimmtes Verzeichnis im System und Docker weist dem Volume standardmäßig einen Pfad unter dem belegten Pfad zu; und „Mounting“ belegt keinen Pfad als Mountpunkt.

Was ist der Unterschied zwischen Docker-Volume und Mount?

Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Docker-1.13.1-Version, Dell G3-Computer.

Was ist der Unterschied zwischen Docker-Volume und Mount?

Wenn mehrere Container über einen längeren Zeitraum hinweg auf dasselbe Datenverzeichnis zugreifen müssen oder wenn Daten im Container beibehalten werden müssen (z. B. eine Datenbank). Ich habe immer die Mount-Verzeichnisform (bind mounts) verwendet, um ein Verzeichnis auf dem Host in ein bestimmtes Verzeichnis im Container zu mounten. Diese Methode kann das Problem lösen, weist jedoch immer einige Mängel auf:

  • Die Bereitstellung von Containern Verschiedene Server müssen auf der Grundlage der tatsächlichen Bedingungen geändert werden.
  • Die Datei- und Verzeichnisberechtigungen verschiedener Betriebssysteme werden Sie verwirren und verärgern?

Und diese Probleme können durch die Verwendung von Volume gelöst werden. Vergleichen wir zunächst Bind-Mounts und Docker-Volumen und sehen wir dann, wie Volume das Problem von Bind-Mounts löst. Schauen wir uns zunächst ein Bild an:

Was ist der Unterschied zwischen Docker-Volume und Mount?
Dieses Bild stammt aus dem Docker-Dokument

Dieses Bild zeigt, dass Bind Mount und Volume tatsächlich das Dateisystem des Hosts verwenden. Der Unterschied besteht darin, dass sich das Volume im von Docker verwalteten Verzeichnis befindet selbst. Es gibt also keine durch Berechtigungen verursachten Mount-Probleme, und der Verzeichnispfad wird von Docker selbst verwaltet, sodass keine Notwendigkeit besteht, unterschiedliche Pfade auf verschiedenen Servern anzugeben , nicht alle, wie weiter unten erläutert wird) Pflege?). Werfen wir als Nächstes einen Blick auf die verschiedenen Verwendungsmöglichkeiten von Bind Mount und Volume.

1. Wenn der Container auf verschiedenen Servern bereitgestellt wird, muss der Pfad entsprechend dem tatsächlichen Festplatten-Mounting-Verzeichnis geändert werden.

Zum Beispiel:

In Linux-Systemen verwenden wir häufig „/var/someDir“ als Mount-Verzeichnis;

Auf dem Mac ist /var/ jedoch kein echtes Verzeichnis. Wir verwenden /var/ nicht

In Windows-Systemen werden Sie von Windows-Benutzern gefragt: /var / Was ist das? C-Laufwerk und D-Laufwerk sind die vernünftigste Unterteilung ~~

Jeder sagt, sie sind die Schönsten, wer ist die Schönsten? Das Var-Verzeichnis auf dem Mac ist ein Softlink Die Datei- und Verzeichnisberechtigungen des Systems werden Sie verwirren und verärgern? Ich gehe hier nicht auf Details ein. Wenn Sie auf diese Probleme stoßen, können Sie es ausprobieren und erleben. Aber auf dem Mac ist es besser, schließlich ist es dasselbe wie unter Linux.
Zusätzlich zur Mount-Methode in Docker gibt es auch ein Volume, das Daten speichern kann. Es ist etwas peinlich, dies zu erwähnen. Nachdem ich Docker so lange verwendet habe, habe ich das Mounten immer als Volume betrachtet, aber das ist nicht meine Schuld . Die Docker-Compose-Datei befindet sich im Volume-Abschnitt. Es gibt kein Problem beim Schreiben der Zuordnungsbeziehung zwischen dem Container und dem Host-Mount-Pfad, aber das war schon immer ein Missverständnis. . (Ausgefallene Schuldzuweisungen?)
Tatsächlich sind „Mounting“ und „Docker Volume“ nicht dasselbe. Es gibt einen gewissen Unterschied, und Docker Engine selbst belegt ein bestimmtes Verzeichnis im System ., Linux ist im Allgemeinen „/var/lib/docker“ und kann unter Mac und Windows angepasst werden. Wenn wir ein Volume deklarieren, weist Docker dem Volume standardmäßig einen Pfad unter dem belegten Pfad zu, zum Beispiel:

Title

Relativ zum Mounten ist das Volume ein Pfad, der von Docker Engine in seinem eigenen „Revier“ zugewiesen wird. as Der Einhängepunkt und die Berechtigungen der eigenen Site müssen übersichtlich angeordnet sein. Daher sind die oben genannten Probleme beim Mounten des Hostpfads gelöst. ?

Wenn Sie es verwenden, verwenden Sie einfach den Volume-Namen anstelle des Host-Pfadnamens. Angenommen, wir haben oben ein Volume mit dem Namen „test_vol“ erstellt:

  1. docker run -d -v „test_vol:/var/data“ some_image, sodass das Verzeichnis /var/data im Container am Mountpunkt von „test_vol“ gemountet wird;
  2. docker-compose ist ähnlich, erfordert aber Deklarieren Sie das Volume in der Datei docker-compose.yaml:

Achtung!!

  1. Es ist zu beachten, dass das Volume das Docker-Verzeichnis erweitert, da es gespeichert werden muss Bilder und Um das Volume zu speichern, legen Sie es am besten nicht auf der Systemfestplatte ab, sondern konfigurieren Sie das Docker-Installationsverzeichnis auf einer anderen größeren Mount-Festplatte.
  2. Die beiden verhalten sich unterschiedlich: Wenn das entsprechende Verzeichnis außerhalb des Containers leer ist, kopiert volume zuerst den Inhalt des Containers in das Verzeichnis außerhalb des Containers, während mount das interne Verzeichnis des Containers mit dem externen Verzeichnis überschreibt! !
  3. volume Ein weiterer Nachteil von Bind Mount besteht darin, dass Dateien nicht direkt gemountet werden können, beispielsweise die Konfigurationsdatei des Nginx-Containers: nginx.conf.

Hier muss erklärt werden, dass eine einzelne Dateimethode wie eine Konfigurationsdatei nicht für die Verwendung von Volume geeignet ist. Obwohl die Bind-Mount-Methode ebenfalls gelöst werden kann, ist die Konfigurationsdatei einige vertrauliche Informationen wie Datenbankkennwörter, die beste Methode is Verwendet tmpfs.

Das Volumen von Kubernetes spiegelt auch ein ähnliches Design wider. Obwohl subPath das Problem der Konfigurationsdatei-Einbindung lösen kann, ist die Verwendung von configMap die beste Möglichkeit.

Empfohlenes Lernen: „Docker-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Docker-Volume und Mount?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was ist ein Host in Docker?Nächster Artikel:Was ist ein Host in Docker?