VOLUME
Polecenie zamontuje katalog wewnątrz pojemnika i przechowywać dowolne pliki utworzone lub edytowane wewnątrz tego katalogu na dysku gospodarze poza struktury plików pojemnik , z pominięciem systemu plików union.
Chodzi o to, że woluminy mogą być współużytkowane między kontenerami docker i pozostaną w pobliżu, dopóki istnieje kontener (uruchomiony lub zatrzymany), który się do nich odwołuje.
Możesz mieć inne kontenery, aby montować istniejące woluminy (efektywnie współużytkując je między kontenerami) za pomocą --volumes-from
polecenia podczas uruchamiania kontenera.
Podstawowa różnica pomiędzy VOLUME
i -v
jest to: -v
zamontuje istniejących plików z poziomu systemu operacyjnego wewnątrz pojemnika Döcker i VOLUME
będzie tworzyć nową, pustą przestrzeń na hoście i zamontować go wewnątrz pojemnika.
Przykład:
- Masz plik Dockerfile, który definiuje plik
VOLUME /var/lib/mysql
.
- Tworzysz obraz dockera i oznaczasz go
some-volume
- Uruchom kontener
I wtedy,
- Masz inny obraz dokera, którego chcesz użyć z tego woluminu
- Uruchamiasz kontener Dockera z następującymi elementami:
docker run --volumes-from some-volume docker-image-name:tag
- Teraz masz uruchomiony kontener docker, który będzie miał wolumin z
some-volume
zamontowany w/var/lib/mysql
Uwaga: użycie --volumes-from
spowoduje zamontowanie wolumenu na wszystkim, co istnieje w lokalizacji wolumenu. To znaczy, jeśli miałeś rzeczy /var/lib/mysql
, zostaną one zastąpione zawartością woluminu.
--volumes-from
zamontuje cięVOLUME
na wszystko, co określisz-v
. Co ciekawe, wygląda na to, że uruchomienie kontenera w trybie uprzywilejowanym (docker run --privileged
) iumount
ing/var/lib/mysql
po prostu pozostawi pusty katalog, więc twój-v
mount jest całkowicie ignorowany, gdy jest w konflikcie z plikiemVOLUME
.named-volume:/path/in/container
. Nienazwane woluminy otrzymują skróty dla nazw i te skróty można podać zamiast ścieżki hosta, aby uzyskać dostęp do osieroconych woluminów. :) Pamiętaj,volume ls
może nie pokazać ich wszystkich - spróbujdocker volume ls -f dangling=true
też.Dodam własną odpowiedź, ponieważ uważam, że inni nie rozumieją Dockera.
Używanie
VOLUME
w pliku Dockerfile jest właściwym sposobem ™, ponieważ dajesz Dockerowi znać, że określony katalog zawiera trwałe dane. Docker utworzy wolumin dla tych danych i nigdy go nie usunie, nawet jeśli usuniesz wszystkie kontenery, które go używają.Pomija również unijny system plików, dzięki czemu wolumin jest w rzeczywistości katalogiem, który jest montowany (do odczytu i zapisu lub tylko do odczytu) we właściwym miejscu we wszystkich kontenerach, które go współużytkują.
Teraz, aby uzyskać dostęp do tych danych z hosta, wystarczy sprawdzić kontener:
Zwykle robię dowiązania symboliczne w jakimś standardowym miejscu, takim jak / srv , dzięki czemu mogę łatwo uzyskać dostęp do woluminów i zarządzać zawartymi w nich danymi (tylko w przypadku woluminów, na których Ci zależy):
źródło
OBJĘTOŚĆ służy
Dockerfile
do odsłonięcia objętości używanej przez inne pojemniki. Przykład, utwórzDockerfile
jako:OD Ubuntu: 14.04.2018
zbuduj obraz:
$ docker build -t testing_volume .
Uruchom kontener, powiedzmy container1:
$ docker run -it <image-id of above image> bash
Teraz uruchom kolejny kontener z opcją woluminy z jako (powiedzmy-kontener2)
$ docker run -it --volumes-from <id-of-above-container> ubuntu:14.04 bash
Otrzymasz wszystkie dane z
/myvol
katalogu kontener 1 do kontenera 2 w tej samej lokalizacji.-v
opcja jest podawana w czasie wykonywania kontenera, który służy do montowania katalogu kontenera na hoście. Jest prosty w użyciu, wystarczy podać-v
opcję z argumentem jako<host-path>:<container-path>
. Cała komenda może być jak$ docker run -v <host-path>:<container-path> <image-id>
źródło
Zasadniczo
VOLUME
i-v
opcja są prawie równe. Oznacza to „konkretny katalog montowania w kontenerze”. Na przykładVOLUME /data
i-v /data
ma dokładnie to samo znaczenie. Jeśli uruchomisz obrazVOLUME /data
z-v /data
opcją lub z opcją,/data
katalog zostanie zamontowany w Twoim kontenerze. Ten katalog nie należy do Twojego kontenera.Wyobraź sobie, że dodajesz pliki do
/data
kontenera, a następnie zatwierdzasz kontener do nowego obrazu. W katalogu danych nie ma żadnych plików, ponieważ zamontowany/data
katalog należy do oryginalnego kontenera.Ten zamontowany katalog
/data
jest używany do przechowywania danych, które nie należą do Twojej aplikacji. Możesz też wstępnie zdefiniować katalog danych, który nie należy do kontenera, używającVOLUME
.Różnica między opcjami
Volume
i-v
polega na tym, że można ich używać-v
dynamicznie podczas uruchamiania kontenera. Oznacza to, że możesz dynamicznie montować jakiś katalog. Inną różnicą jest to, że możesz zamontować katalog hosta w kontenerze za pomocą-v
źródło
To pochodzi z samej dokumentacji Dockera, może być pomocne, proste i jasne:
„Katalog hosta jest z natury zależny od hosta. Z tego powodu nie można zamontować katalogu hosta z pliku Dockerfile, instrukcja VOLUME nie obsługuje przekazywania katalogu hosta, ponieważ zbudowane obrazy powinny być przenośne. katalog nie byłby dostępny na wszystkich potencjalnych hostach. ”.
źródło
Jeśli przyjechałeś tutaj, ponieważ szukałeś prostego sposobu na przeglądanie
VOLUME
:docker volume list
docker run -it --rm --mount source=[NAME OF VOLUME],target=/volume busybox
cd /volume
aby wprowadzić głośność.źródło