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

js Drag & Drop-Tabelle zur Realisierung der Inhaltsberechnung

In diesem Artikelbeispiel wird der spezifische Co...

So schreiben Sie schönen HTML-Code

So sieht schöner HTML-Code aus. So schreiben Sie ...

Lösen Sie das Problem der unsicheren Docker x509-Registrierung

Nach der Installation von Docker trat beim Versuc...

XHTML-Tags haben ein schließendes Tag

<br />Ursprünglicher Link: http://www.dudo.o...

So führen Sie Befehle auf einem Remote-Linux-System über SSH aus

Manchmal müssen wir einige Befehle auf einem Remo...

Best Practices-Handbuch für partitionierte MySQL-Tabellen

Vorwort: Partitionierung ist ein Tabellenentwurfs...

LinkedIn wird überarbeitet, um das Surfen auf der Website zu vereinfachen

Das geschäftliche Social-Networking-Portal Linked...

Tutorial zur Installation der mysql5.7.36-Datenbank in einer Linux-Umgebung

Download-Adresse: https://dev.mysql.com/downloads...

HTML Tutorial: Sammlung häufig verwendeter HTML-Tags (4)

Diese eingeführten HTML-Tags entsprechen nicht un...

Löschen von Dateien mit Leerzeichen in Linux (keine Verzeichnisse)

In unserer täglichen Arbeit kommen wir oft mit Da...

Schritte zum Reparieren einer Beschädigung der Datei grub.cfg im Linux-System

Inhaltsverzeichnis 1. Einführung in die grub.cfg-...

Liste der allgemeinen MySql-Abfragebefehlsoperationen

In MySQL häufig verwendete Abfragebefehle: mysql&...