Der Unterschied zwischen VOLUME und docker -v in Dockerfile

Der Unterschied zwischen VOLUME und docker -v in Dockerfile

Es gibt offensichtliche Unterschiede zwischen der Volume-Montage in Dockerfile und der Montage mit dem Befehl docker -v:

1. VOLUMEN

Das auf dem Hostcomputer in Dockerfile mit VOLUME gemountete Volume ist ein anonymes Volume. Auf dem Hostcomputer wird es automatisch anonym im Verzeichnis /var/lib/docker/volumes/ gemountet. Der Code lautet wie folgt:

VON frolvlad/alpine-java:jre8-slim
BEWAHRER oas.cloud
KOPIEREN Sie nickdir.
VOLUME /usr/local/oas/Datei/
ARBEITSVERZEICHNIS /usr/local/oas/

Das oben genannte VOLUME /usr/local/oas/file/ definiert den Pfad des Verzeichnisses im Container. Das Verzeichnis wird während des Containererstellungsprozesses im Container erstellt und der Name des Mount-Verzeichnisses auf dem Host wird zufällig generiert.

Zum Beispiel:

/var/lib/docker/volumes/593fda6d7b8296bfca22894b326727c734133eebb11c9bc2c25a73b892157a37

Hier auf dem Host-Rechner

/var/lib/docker/volumes/593fda6d7b8296bfca22894b326727c734133eebb11c9bc2c25a73b892157a37

Das Verzeichnis entspricht dem Verzeichnis /usr/local/oas/file/ im Container

2. Docker -v

docker -v kann das spezifische Verzeichnis angeben, das auf dem Hostcomputer gemountet ist, was besser steuerbar ist als die VOLUME-Mounting-Methode von Dockerfile. Der Code lautet wie folgt:

$ docker run --name tengine-web -d -p 9527:80 -p 9000:9000 \
-v /usr/local/tengine/logs:/var/log/nginx \
-v /usr/local/tengine/conf.d:/etc/nginx/conf.d \
-v /usr/local/tengine/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/tengine/html:/usr/share/nginx/html \
-v /usr/local/oas/Datei:/usr/local/oas/Datei nginx

Der obige Befehl kann /usr/local/tengine/logs und andere Verzeichnisse des Hosts in /var/log/nginx und andere entsprechende Verzeichnisse des Containers mounten. Der Pfad vor dem Doppelpunkt ist das Host-Verzeichnis (absoluter Pfad) und der Pfad nach dem Doppelpunkt ist der im Image gemountete Pfad (absoluter Pfad).

Ergänzung: Der Unterschied zwischen den Docker-Datenvolume-Mounting-Befehlen volume (-v) und mount

1. Einleitung

Benutzer können Container mit Datenvolumes erstellen, indem sie die Optionen --volume/-v oder --mount von Docker Run verwenden. Es gibt jedoch einige subtile Unterschiede zwischen diesen beiden Optionen, die hier zusammengefasst sind.

2. Befehlsverwendung

--volume(-v)

Der Parameter --volume (kurz -v) kann lediglich ein Bind-Mount erstellen. Beispiel:

docker run --name $CONTAINER_NAME -it \
-v $PWD/$CONTAINER_NAME/app:/app:rw \
-v $PWD/$CONTAINER_NAME/Daten:/Daten:ro \
avocado-cloud:latest /bin/bash

Hinweise:

Befehlsformat:

[[HOST-DIR:]CONTAINER-DIR[:OPTIONEN]]]

Wenn HOST-DIR angegeben ist, muss es sich um einen absoluten Pfad handeln. Wenn der Pfad nicht existiert, wird er automatisch erstellt.

Im Beispiel bedeutet rw Lesen/Schreiben und ro bedeutet schreibgeschützt.

--mount

Der Parameter --mount wird standardmäßig zum Mounten von Volumes verwendet, kann aber auch zum Erstellen von Bind-Mounts und TMPFs verwendet werden. Wenn die Typoption nicht angegeben ist, wird das Volume standardmäßig gemountet. Volumes sind eine flexiblere Möglichkeit zur Datenverwaltung. Volumes können über den Docker-Volume-Befehlssatz verwaltet werden. Beispiel:

docker run --name $CONTAINER_NAME -it \
--mount Typ=Binden,Quelle=$PWD/$CONTAINER_NAME/App,Ziel=/App \
--mount Quelle=${CONTAINER_NAME}-data,Ziel=/data,schreibgeschützt \
avocado-cloud:latest /bin/bash

Hinweise:

Format des Befehls zum Mounten des Volumes:

[Typ=Volume,]Quelle=mein-Volume,Ziel=/Pfad/in/Container[,...]

Erstellen Sie ein Bind-Mount-Befehlsformat:

Typ=Binden,Quelle=/Pfad/auf/Host,Ziel=/Pfad/in/Container[,...]

Wenn Sie eine Bind-Mount erstellen und eine Quelle angeben, muss es sich um einen absoluten Pfad handeln und der Pfad muss bereits vorhanden sein.

Im Beispiel bedeutet readonly schreibgeschützt

3. Zusammenfassung der Unterschiede

1. Vergleich zwischen dem Erstellen eines Bind-Mounts und dem Mounten eines Volumes

Vergleichsartikel Bind-Mount Volumen
Quellenstandort Benutzerdefiniert /var/lib/docker/volumes/
Quelle ist leer Ziel überschreiben, um es zu leeren Zielinhalt behalten
Die Quelle ist nicht leer Zielinhalt überschreiben Zielinhalt überschreiben
Quellentyp Datei oder Verzeichnis Kann nur ein Verzeichnis sein
Portabilität Allgemein (Selbstwartung) Stark (Docker-Hosting)
Direkter Hostzugriff Einfach (einfach kauen) Eingeschränkt (Anmeldung als Root-Benutzer erforderlich)*

*Hinweise:

Docker kann den Inhalt des Volumes nicht einfach für normale Benutzer auf dem Host über sudo chown someuser: -R /var/lib/docker/volumes/somevolume öffnen. Wenn mehr Berechtigungen geöffnet werden, entstehen Sicherheitsrisiken. In dieser Hinsicht ist das Design von Podman viel idealer. Das Volume wird im Pfad $HOME/.local/share/containers/storage/volumes/ gespeichert, was Komfort bietet und Sicherheit gewährleistet.

Der Container kann ohne Root-Rechte ausgeführt werden, was einer der Vorteile von Podman ist. Im praktischen Einsatz bringt das wirklich große Vorteile.

2. Vergleich der Verwendung von --volume und --mount beim Erstellen eines Bind-Mounts

Vergleichsartikel --volume oder -v --mount Typ=Binden
Wenn der Hostpfad nicht existiert Automatische Erstellung Befehlsfehler

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Befehlsanalyse zum Schreiben von Dockerfile-Dateien und Erstellen von Images
  • Dockerfile – einfache Einführung
  • Kenntnisse im Bereich Docker-Image-Layering und Dockerfile-Schreiben
  • Prozessanalyse von reservierten Wortanweisungen in Dockerfile
  • Lösung für das Problem „/bin/sh: pip: Befehl nicht gefunden“ beim Erstellen der Docker-Datei
  • Docker führt die Befehlsanalyse für den DockerFile-Build-Prozess aus

<<:  Die Organisation W3C gibt Stilempfehlungen für HTML4

>>:  Vue: Wertübertragung zwischen Vater und Sohn, Wertübertragung zwischen Bruder und Kind, detaillierte Erläuterung

Artikel empfehlen

Zusammenfassung der Wissenspunkte zu Null in der MySQL-Datenbank

In der MySQL-Datenbank ist Null eine häufige Situ...

4 Möglichkeiten zur Optimierung von MySQL-Abfragen für Millionen von Daten

Inhaltsverzeichnis 1. Der Grund, warum das Limit ...

Verwenden Sie Iframe, um Wettereffekte auf Webseiten anzuzeigen

CSS: Code kopieren Der Code lautet wie folgt: *{Ra...

Beispiel eines Befehls zur Linux-Hardwarekonfiguration

Hardware-Ansichtsbefehle System # uname -a # Kern...

50 superpraktische Tools für Webdesigner

Webdesigner zu sein ist nicht einfach. Sie müssen...

Proxy_pass-Methode in mehreren if in Nginx-Standorten

1. Lassen Sie uns zunächst das relevante Wissen z...

Eine kurze Analyse der Verwendung von Rahmen- und Anzeigeattributen in CSS

Einführung in Rahmeneigenschaften border -Eigensc...

Schritte zum Kapseln von Element-UI-Popupkomponenten

Kapseln Sie el-dialog als Komponente ein Wenn wir...

20 CSS-Codierungstipps für mehr Effizienz (sortiert)

In diesem Artikel möchten wir eine Sammlung von 2...

So installieren und verwenden Sie Cockpit unter CentOS 8/RHEL 8

Cockpit ist ein webbasiertes Serververwaltungstoo...