Úvod
Docker volumes jsou široce používané a užitečné nástroje pro zajištění stálosti dat při práci v kontejnerech. Jsou lepší alternativou než kompilace dalších zapisovatelných vrstev, které zvětšují velikost obrázku Docker.
V tomto kurzu se na praktických příkladech naučte, jak používat Docker Volumes.
Co jsou svazky Dockeru?
Svazky Docker jsou systémy souborů připojené ke kontejnerům Docker, aby se zachovala data generovaná běžícím kontejnerem.
Svazky jsou uloženy na hostiteli nezávisle na životním cyklu kontejneru. To uživatelům umožňuje snadno zálohovat data a sdílet systémy souborů mezi kontejnery.
Začínáme s Docker Volumes
Existují různé způsoby, jak připojit svazek Docker při spouštění kontejneru. Uživatelé se mohou rozhodnout mezi -v
a --mount
příznaky, které se přidávají do docker run
příkaz.
Tento článek ukazuje příklady obou používaných příznaků.
Jak vytvořit svazek dockeru
Chcete-li vytvořit svazek Docker, použijte příkaz:
docker volume create [volume_name]
Docker automaticky vytvoří adresář pro svazek na hostiteli pod /var/lib/docker/volume/ cesta. Nyní můžete tento svazek připojit ke kontejneru a zajistit tak stálost dat a sdílení dat mezi více kontejnery.
Chcete-li například vytvořit svazek pod názvem data , spustíte příkaz:
docker volume create data
Seznam svazků Docker
Chcete-li ověřit, že jste úspěšně vytvořili svazek Docker, požádejte Docker, aby vypsal všechny dostupné svazky pomocí:
docker volume list
Výstup zobrazí seznam svazků s uvedením jejich umístění (OVLADAČ ) a jejich VOLUME NAME . Na obrázku níže můžete vidět objem dat vytvořené v předchozí části.
Kontrola svazků Docker
Chcete-li zobrazit další informace o svazku Docker, použijte inspect
příkaz:
docker volume inspect [volume_name]
Uvádí podrobnosti o svazku, včetně jeho umístění v hostitelském souboru (Mountpoint ). Vše uložené v datovém svazku lze také nalézt v adresáři uvedeném pod cestou k přípojnému bodu.
Připojení datového svazku
Chcete-li připojit datový svazek ke kontejneru, přidejte --mount
příznak k docker run
příkaz. Přidá svazek do určeného kontejneru, kde ukládá data vytvořená ve virtuálním prostředí.
Chcete-li spustit kontejner a připojit k němu datový svazek, postupujte podle základní syntaxe:
docker run --mount source=[volume_name],destination=[path_in_container] [docker_image]
Nahraďte [path_in_container]
s cestou, kam chcete umístit objem dat v kontejneru. Vše uložené v tomto adresáři se také automaticky uloží do datového svazku na hostiteli.
Například ke spuštění kontejneru Ubuntu a připojení dat hlasitost, spusťte:
docker run -it --name=example1 --mount source=data,destination=/data ubuntu
Příkaz dává Dockeru pokyn ke spuštění kontejneru v interaktivním režimu (-it
) z obrazu Ubuntu pod názvem example1
, při připojování dat objemu do /data
adresář uvnitř kontejneru.
Poté zkontrolujte, zda byl svazek úspěšně připojen, uvedením obsahu kontejneru:
ls
Najděte svazek Docker pod názvem definovaným při spouštění kontejneru. V tomto příkladu se jedná o data .
Kopírování souborů mezi kontejnery ze sdíleného svazku
Podívejme se, jak vám svazky Docker umožňují sdílet soubory mezi kontejnery.
K tomu použijeme objem a kontejner vytvořený v předchozí části. To zahrnovalo spuštění příkazů:
docker volume create data
docker run -it --name=example1 --mount source=data,destination=/data ubuntu
1. Jakmile přepnete na příkazový řádek kontejneru, přejděte do adresáře datového svazku:
cd data
2. Vytvořte prázdný ukázkový soubor pomocí dotykového příkazu:
touch sample1.txt
3. Nyní opusťte kontejner:
exit
4. Poté spusťte nový kontejner příklad2 se stejným objemem dat:
docker run -it --name=example2 --mount source=data,destination=/data ubuntu
5. Vyjmenujte obsah nádoby. Měli byste najít datový adresář, jako v příklad1 :
ls
6. Přejděte do datového adresáře a vypište jeho obsah:
cd data
ls
Výstup by měl obsahovat sample1.txt soubor, který jste vytvořili v předchozím kontejneru (příklad1 ).
Připojení hostitelského adresáře jako datového svazku
Můžete také připojit existující adresář z hostitelského počítače do kontejneru. Tento typ svazku se nazývá Hostitelské svazky .
Hostitelské svazky můžete připojit pomocí -v
příznak a specifikující název hostitelského adresáře.
Vše v hostitelském adresáři je pak dostupné v kontejneru. A co víc, všechna data vygenerovaná v kontejneru a umístěná do datového svazku jsou bezpečně uložena v hostitelském adresáři.
Základní syntaxe pro připojení hostitelského adresáře je:
docker run -v "$(pwd)":[volume_name] [docker_image]
"$(pwd)"
atribut instruuje Docker, aby připojil adresář, ve kterém se uživatel aktuálně nachází.
Následující příklad popisuje, jak se to dělá.
1. Nejprve vytvořte vzorový adresář na hostiteli pod názvem tmp a přesuňte se do něj:
mkdir tmp
cd tmp
2. Jakmile jste v adresáři, vytvořte testovací soubor, abyste zjistili, zda bude dostupný z kontejneru:
touch file.txt
2. Poté použijte docker run
příkaz ke spuštění kontejneru Ubuntu s připojeným hostitelským adresářem:
docker run -it -v "$(pwd)":/data1 ubuntu
Tím se kontejner spustí v interaktivním režimu a připojí se svazek pod názvem data1 .
3. Vypište obsah kontejneru a ověřte, že obsahuje data1 adresář:
ls
4. Otevřete připojený adresář a vypište obsah. Výstup by měl zobrazovat soubor, který jste vytvořili na hostiteli:
cd data1
ls
Oprávnění ke svazku a vlastnictví
Oprávnění k svazku lze změnit konfigurací vlastnictví v rámci souboru Dockerfile.
Použijte RUN
instrukce a chown
příkaz k nastavení oprávnění svazku Docker. Ujistěte se, že tato instrukce předchází řádek definující VOLUME
.
Alternativně můžete změnit vlastnictví adresáře používaného jako hostitelský svazek.
Pokyny k použití chown
naleznete v Linux File Permission Tutorial:How To Check and Change Permissions.
Jak odstranit svazky Docker
Chcete-li odstranit svazek Docker, musíte zadat jeho název.
Základní syntaxe pro odebrání svazku Docker v příkazovém řádku je:
docker volume rm [volume_name]
Docker odebere svazky pouze v případě, že se právě nepoužívají. Pokud existuje kontejner se zadaným objemem, odpoví chybou. Chcete-li pokračovat, zastavte a vyjměte kontejner a poté znovu spusťte docker volume rm
příkaz.
Jak odstranit všechny svazky najednou
Chcete-li odstranit všechny nepoužívané svazky Dockeru jediným příkazem:
docker volume prune
Výstup vás upozorní, že odstraní všechny místní svazky, které nepoužívá alespoň jeden kontejner. Stiskněte y pokračovat.