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

Vue implementiert einfache Rechnerfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Analyse und Lösung zur Leistungsoptimierung von Vue.js-Anwendungen

Inhaltsverzeichnis 1. Einleitung 2. Warum brauche...

Fünf Möglichkeiten zur Implementierung der Vererbung in js

Ausleihen von Konstruktoren Die Grundidee dieser ...

33 Eis- und Schnee-Schriftarten zum Download empfohlen (privat und kommerziell)

01 Winterflocken (nur einzeln) 02 Snowtop Caps (k...

So vergessen Sie das Root-Passwort in Mysql8.0.13 unter Windows 10

1. Stoppen Sie zuerst den MySQL-Dienst Öffnen Sie...

Beispiel für eine HTTPS-Konfigurationsmethode für den Nginx-Server

Linux: Linux-Version 3.10.0-123.9.3.el7.x86_64 Ng...

Vier Möglichkeiten, CSS und HTML zu kombinieren

(1) Jedes HTML-Tag hat ein Attribut style, das CS...

Grafische Einführung in den Unterschied zwischen := und = in MySQL

Der Unterschied zwischen := und = = Nur beim Setz...

Eine ausführliche Zusammenfassung der Überlegungen zu MySQL-Zeiteinstellungen

Existiert die Zeit wirklich? Manche Menschen glau...

So betreten und verlassen Sie den Docker-Container

1 Starten Sie den Docker-Dienst Zuerst müssen Sie...

Detaillierte Erläuterung des Redo-Logs und Undo-Logs in MySQL

Die wichtigsten Protokolle im MySQL-Protokollsyst...