V dnešním pokračování naší série materiálů o Dockeru se budeme zabývat prací s daty, konkrétně s Docker volumes. V těchto materiálech jsme neustále srovnávali softwarové mechanismy Dockera s různými jedlými analogy. Nepřejdeme od této tradice ani zde. Data v Dockeru můžeme považovat za koření. Ve světě existuje mnoho druhů koření, a v Dockeru existuje mnoho způsobů, jak pracovat s daty.
→
→
→
→
→
→
Vezměte prosím na vědomí, že tento materiál byl připraven pomocí Docker engine verze 18.09.1 a API verze .
Data v Dockeru mohou být uložena buď dočasně, nebo trvale. Začněme s dočasnými daty.
Dočasné uchovávání dat
V kontejnerech Docker lze organizovat práci s dočasnými daty dvěma způsoby.
Ve výchozím nastavení se soubory, které aplikace vytváří v kontejneru, ukládají do vrstvy kontejneru, která podporuje zápis. Aby tento mechanismus fungoval, není třeba nic speciálně nastavovat. Dává to možnost levného a efektivního řešení. Aplikaci stačí jednoduše uložit data a pokračovat v běhu. Nicméně jakmile kontejner přestane existovat, zmizí i data uložená tímto jednoduchým způsobem.
Pro uchovávání dočasných souborů v Dockeru je k dispozici další řešení, které je vhodné pro případy, kdy je zapotřebí vyšší úroveň výkonu ve srovnání s tím, co lze dosáhnout použitím standardního mechanismu dočasného uchovávání dat. Pokud nepotřebujete, aby vaše data byla uchovávána déle, než existuje kontejner, můžete k němu připojit tmpfs - dočasné úložiště informací, které využívá paměť hostitele. To umožní urychlit operace zápisu a čtení dat.
Často je třeba uchovávat data i po tom, co kontejner přestane existovat. K tomu nám pomohou mechanismy trvalého uchovávání dat.
Trvalé ukládání dat
Existují dva způsoby, jak prodloužit životnost dat nad rámec životnosti kontejneru. Jedním z těchto způsobů je použití technologie bind mount. Tento přístup umožňuje připojit například skutečný adresář k kontejneru. S daty uloženými v takovém adresáři budou moci pracovat i procesy mimo Docker. Takhle připojení tmpfs a technologie bind mount.

Připojení tmpfs a bind mount
Nevýhody použití technologie bind mount spočívají v tom, že její použití komplikuje zálohování dat, migraci dat a sdílení dat mezi několika kontejnery. Pro trvalé uchování dat je mnohem lepší použít svazky Docker.
Svazky Docker
Svazek je souborový systém umístěný na hostitelském stroji mimo kontejnery. Vytvářením a správou svazků se zabývá Docker. Zde jsou hlavní vlastnosti svazků Docker:
- Jsou to prostředky pro trvalé uchování informací.
- Jsou samostatné a oddělené od kontejnerů.
- Mohou je společně používat různé kontejnery.
- Umožňují efektivní čtení a zápis dat.
- Svazky lze umístit na zdroje vzdáleného cloudového poskytovatele.
- Mohou být šifrovány.
- Lze jim přiřazovat názvy.
- Kontejner může předem naplnit svazek daty.
- Jsou vhodné pro testování.
Jak vidíte, svazky Docker mají vynikající vlastnosti. Pojďme si říct, jak je vytvořit.
Vytváření svazků
Svazky lze vytvářet prostřednictvím Dockeru nebo pomocí API požadavků.
Zde je instrukce v Dockerfile, která umožňuje vytvořit svazek při spuštění kontejneru.
VOLUME /my_volumePoužitím takové instrukce Docker po vytvoření kontejneru vytvoří svazek obsahující data, která již existují na uvedeném místě. Všimněte si, že pokud vytváříte svazek pomocí Dockerfile, nezbavuje vás to povinnosti uvést místo připojení svazku.
Svazky lze vytvářet v Dockerfile také pomocí formátu JSON.
Kromě toho lze svazky vytvářet prostřednictvím příkazového řádku během provozu kontejneru.
Práce se svazky z příkazového řádku
▍Vytváření svazku
Samostatný svazek lze vytvořit následujícím příkazem:
docker volume create --name my_volume▍Zjištění informací o svazcích
Abyste zobrazili seznam svazků Docker, použijte následující příkaz:
docker volume lsKonkrétní svazek můžete prozkoumat takto:
docker volume inspect my_volume▍Odstranění svazku
Svazek můžete odstranit takto:
docker volume rm my_volumeChcete-li odstranit všechny svazky, které nejsou používány kontejnery, můžete použít následující příkaz:
docker volume prunePřed odstraněním svazků vás Docker požádá o potvrzení provedení této operace.
Pokud je svazek spojen s nějakým kontejnerem, takový svazek nelze odstranit, dokud není odpovídající kontejner odstraněn. I když je kontejner odstraněn, Docker to nemusí vždy správně rozpoznat. Pokud se to stane — použijte následující příkaz:
docker system pruneTen slouží k čištění zdrojů Dockeru. Po vykonání tohoto příkazu byste měli mít možnost odstranit svazky, jejichž stav byl dříve nesprávně určen.
Příznaky —mount a —volume
Při práci se svazky, budete muset při vyvolání příkazu docker, často používat příznaky. Například, abyste vytvořili svazek během vytváření kontejneru, můžete použít tuto konstrukci:
docker container run --mount source=my_volume, target=\/container\/path\/for\/volume my_image Dříve (před rokem 2017) byl populární příznak --volume. Tento příznak (ještě se dá používat ve zkrácené podobě, pak vypadá jako -v) byl původně určen pro samostatné kontejnery, zatímco příznak --mount se používal v prostředí Docker Swarm. Od Dockeru 17.06 lze však příznak --mount používat v jakýchkoli scénářích.
Je třeba poznamenat, že při používání příznaku --mount se zvyšuje objem dodatečných údajů, které je třeba uvést v příkazu, ale z několika důvodů je lepší používat právě tento příznak, a ne --volume. Příznak --mount je jediný mechanismus, který umožňuje pracovat se službami nebo uvádět parametry ovladače svazku. Navíc, práce s tímto příznakem je snazší.
V existujících příkladech příkazů pro práci s daty v Dockeru můžete najít řadu příkladů použití příznaku -v. Když se snažíte přizpůsobit tyto příkazy pro sebe, berte v úvahu, že příznaky --mount a --volume používají různé formáty parametrů. To znamená, že nemůžete jednoduše nahradit -v na --mount a získat funkční příkaz.
Hlavní rozdíl mezi --mount a --volume spočívá v tom, že při použití příznaku --volume se všechny parametry sdružují dohromady, v jednom poli, zatímco při použití --mount parametry jsou odděleny.
Při práci s --mount parametry jsou prezentovány jako páry klíč-hodnota, konkrétně to vypadá jako key=value. Tyto páry oddělují čárky. Zde jsou často používané parametry --mount:
type— typ montáže. Hodnotou pro odpovídající klíč mohou být , nebo . Zde hovoříme o svazcích, tedy nás zajímá hodnotavolume.source— zdroj montáže. Pro pojmenované svazky je to — jméno svazku. U nepojmenovaných svazků tento klíč neuvedeme. Může být zkrácen nasrc.cílová destinace— cesta, na kterou se soubor nebo složka přimountuje v kontejneru. Tento klíč může být zkrácen nadstnebotarget.readonly— přimountuje svazek, který je určen . Použití tohoto klíče není povinné, hodnota mu není přiřazena.
Zde je příklad použití --mount se spoustou parametrů:
docker run --mount type=volume,source=volume_name,destination=\/path\/in\/container,readonly my_imageZávěry
Zde jsou užitečné příkazy, které můžete použít při práci se svazky Dockeru:
docker volume createdocker volume lsdocker volume inspectdocker volume rmdocker volume prune
Zde je seznam často používaných parametrů pro --mount, aplikovatelných v příkazě typu docker run --mount my_options my_image:
type=volumesource=volume_namedestination=\/path\/in\/containerreadonly
Nyní, když jsme dokončili tuto sérii materiálů o Dockeru, je čas říci pár slov o tom, kam se mohou ti, kteří se učí Docker, posunout dál. skvělý a rozsáhlý článek o Dockeru. kniha o Dockeru (při koupi této knihy se snažte získat její nejnovější vydání). ještě jedna kniha, která se hodí těm, kteří se domnívají, že praxe je nejlepším způsobem studia technologií.
Vážení čtenáři! Jaké materiály o Dockeru byste doporučili, aby studovali nováčci?
Zdroj: habr.com
