Unterschied zwischen VOLUMEN-Erklärung im Dockerfile und -v als docker run parameter
Könnte jemand mir helfen um den Unterschied zu verstehen zwischen:
VOLUME
Befehl in Dockerfile
(Bild Gebäude-layer)
und
-v
Parameter bei der Ausstellung docker run
-v/xyz/bla
Befehl (container-Gebäude-Ebene).
-v
parameter ist für mich klar, das es einfach macht ein Verzeichnis vom host in den container und Umgekehrt, aber wie sieht VOLUME
im Dockerfile
anders Verhalten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
-v
parameter undVOLUME
Stichwort sind fast die gleichen. Sie können-v
haben das gleiche Verhalten wieVOLUME
.Gleiche wie
Aber auch -v haben mehr verwendet, einer von Ihnen ist, wo die Karte, um die Lautstärke:
Also die Frage ist: was ist die Verwendung von
VOLUME
imDockerfile
?Container-Dateisystem besteht aus Schichten, so schreiben es, langsamer und beschränkt (weil die Feste Anzahl von Ebenen) als die einfachen Dateisystem.
Erklären Sie
VOLUME
in IhremDockerfile
zu bezeichnen, wo der container schreiben von Anwendungsdaten. Zum Beispiel ein Datenbank-container, dessen Daten gehen in ein Volumen-unabhängig davon, was Sie in Ihremdocker run
.Wenn Sie beim erstellen eines docker-container für JBoss und Sie verwenden möchten, schnell Dateisystem-Zugriff mit
libaio
yo müssen, zu erklären, das Daten-Verzeichnis alsVOLUME
oder JBoss-Absturz beim Start.Zusammenfassend
VOLUME
erklärt ein Volumen, egal was Sie tun, indocker run
. In der Tat indocker run
können Sie nicht rückgängig machenVOLUME
Erklärung inDockerfile
.Hinsichtlich
-v
, in Laufzeit können Sie erstellen alle drei Typen, jedoch mitVOLUME
Befehl Andockfenster-Datei, nur namens-Volumen ist möglich. Siehe: docs.docker.com/engine/reference/builder/.... WarumVOLUME
? Zu erklären, "es werden benannte Band", die nicht geändert werden zur Laufzeit über-v
Flagge.--mount
erstellen kann, alle drei Typen-v
immer schafft bind-mounts (aber Sie können Steuern, die Pfade).In einer nussschale
Den
VOLUME [PATH]
Anweisung innerhalb eines Dockerfile entsprichtAusführliche Erklärung
Mit Volumina im Andockfenster ist in Erster Linie weniger eine Frage der Geschwindigkeit als eine Frage der Daten-Persistenz unabhängig von einem container-Lebenszyklus. Montage Volumina eine schnellere Festplatte wird natürlich die Leistung zu verbessern, aber Docker ' s Standardverhalten für
VOLUME
ist, erstellen Sie eine benannte Volumes auf dem host-system mit wenig bis gar keine Verbesserungen in der Geschwindigkeit im Vergleich zu den container beschreibbare Schicht.Dies ist zwar zum Teil wahr,
-v
können auch verwendet werden, zu montieren benannte Mengen in Ihre Docker-container, statt ein Verzeichnis. Dieses kleine detail ist wichtig, um zu verstehen, wasVOLUME
tut. Ein Beispiel:Hier ein volume mit dem Namen
my_volume
erstellt wurde. Es verhält sich so, als würde erwarten, dass bei einem "normalen" mount. Änderungen[PATH]
im inneren der container werden beibehalten, in diesem Band. Der Unterschied ist, dass Docker verwaltet die volume location, so dass Sie nicht brauchen, zu kümmern (es ist/var/lib/docker/volumes/my_volume/_data
falls du interessiert bist). Warum würden Sie wollen? Sie hätten eine test-Datenbank. Während Sie nicht brauchen, direkten Zugriff auf die Dateien, möchten Sie vielleicht, um speichern Sie den aktuellen Stand der Montage in andere Datenbank-Container.Den
VOLUME [PATH]
Unterricht grundsätzlich speichert die obigen Anweisungen in das Bild der Metainformationen. Jedes mal also, wenn Sie beginnen, ein container von diesem Bild, das Andockfenster weiß, dass Sie möchten, um zu bestehen[PATH]
im Volumen und kümmert sich.docker inspect --format="{{json .ContainerConfig.Volumes}}" [IMAGE]
ist nichtnull
, Docker erstellt ein volume mit einer Zufalls-ID als Namen für Sie, wie gesehen werden kann indocker volume ls
. Also kurz und knapp: ich fühlte mich von den OP ' s Frage, dass Sie kommen mit einem Beispiel wäre hilfreich. Ich wollte damit nicht sagenVOLUME
erstellt eine namens Lautstärke. Ich habe gerade verwendet benannte Mengen als ein Beispiel für mountpoints, deren Standorte sind managed by Docker.