Staram się pogłębić zrozumienie objętości Dockera i trudno mi zrozumieć różnice / przypadek użycia:
docker volume create
komenda- Plik
docker run -v /path:/host_path
VOLUME
Wpis wDockerfile
pliku
Szczególnie nie rozumiem, co się stanie, jeśli połączysz VOLUME
wpis z -v
flagą.
Odpowiedzi:
Wolumin to trwałe dane przechowywane w
/var/lib/docker/volumes/...
Możesz zadeklarować go w pliku Dockerfile, co oznacza, że za każdym razem, gdy kontener jest uruchamiany z obrazu, wolumin jest tworzony ( pusty ), nawet jeśli nie masz żadnej
-v
opcji.Możesz to zadeklarować w czasie wykonywania
docker run -v [host-dir:]container-dir
.Połączenie dwóch (
VOLUME
+docker run -v
) oznacza, że możesz zamontować zawartość folderu hosta w woluminie utrwalonym przez kontener w/var/lib/docker/volumes/...
Docker volume create tworzy wolumin bez konieczności definiowania pliku Dockerfile i tworzenia obrazu oraz uruchamiania kontenera. Służy do szybkiego umożliwienia innym pojemnikom zamontowania wspomnianej objętości.
Jeśli zachowałeś jakąś zawartość w wolumenie, ale od tego czasu usunąłeś kontener (który domyślnie nie usuwa związanego z nim woluminu, chyba że używasz docker rm -v), możesz ponownie dołączyć ten wolumin do nowego kontenera (deklarując ta sama objętość).
Zobacz „ Docker - jak uzyskać dostęp do woluminu niepodłączonego do kontenera? ”.
Dzięki funkcji tworzenia wolumenu platformy Docker można łatwo ponownie dołączyć nazwany wolumin do kontenera.
źródło
Dockerfile
withVOLUME
i-v /path:/host_path/
flagi. TreśćVOLUME
testamentu zostanie nadpisana treścią/host_path/
?docker volume create --name my_volume
a następnie adocker run --volume-from my_volume
, skąd wiesz, gdzie będzie punkt montowania?docker run ...
, jak mogę pisać do pliku przechowywanego namy_volume
woluminie? Nie znam ... ścieżki? wolumenu w moim uruchomionym kontenerze, ponieważ nic nie zdefiniowałem? Mam nadzieję, że jestem wystarczająco jasny, ponieważ zdecydowanie nie jestem pewien swojego głosu: - /docker volume create --name aname
tworzy nazwany wolumin: przypisujesz ścieżkę do kontenera w czasie wykonywaniadocker run -v aname:/apath
:: ten kontener ma teraz dołączony do niego wolumin, zamontowany w jego folderze / apath. Przepisałem odpowiedź, aby było to jasne.VOLUME
instrukcja staje się interesująca, gdy połączysz ją zvolumes-from
parametrem runtime.Biorąc pod uwagę następujący plik Dockerfile:
Zbuduj obraz za pomocą:
I zakręć pojemnik z:
Pierwszą rzeczą, na którą należy zwrócić uwagę, jest folder o nazwie na tym obrazie
myvolume
. Ale nie jest to szczególnie interesujące, ponieważ kiedy wyjdziemy z pojemnika, objętość również zostanie usunięta.Utwórz pusty plik w tym folderze, więc uruchom w kontenerze następujące polecenie:
Teraz podkręć nowy pojemnik, ale podziel tę samą objętość z
my-first-bb
:Zobaczysz, że
my-second-bb
zawiera plikhello.txt
wmyvolume
folderze.Po wyjściu z obu pojemników twoja objętość również zostanie usunięta.
źródło
--rm
opcją. Myślę, że wspomnienie o tym może zadziałać. Jeśli nie rozpocząłeś kontenera za pomocą--rm
, nadal możesz usunąć kontener i jego anonimowe woluminy za pomocądocker rm -v my-container
.