Docker – 3. Volume

V této časti začneme v kontejneru používat Volume (obsah) pro práci s perzistentními daty.

V předešlé části jsme si naznačili, že když chceme měnit obsah souboru index.html, nastává komplikace. Abychom tuto komplikaci vyřešili, soubor index.html nebudeme kopírovat do kontejneru při každém spuštění (run) obrazu (image) nanovo. Namísto toho jednoduše na soubor index.html na hostitelském systému odkážeme. Kontejner tak nebude obsah souboru načítat zevnitř (ze svého souborového systému), ale zvenku (ze souborového systému hostitelského systému). Jde o rychlejší způsob spouštění a používání obrazů (images), díky kterému navíc při vymazaní kontejneru nepřijdeme o potřebný obsah (např. ten ze souboru index.html).

Tip: Docker běží výborně ve WebSupport VPS. Vysoušejte prémiový virtuální server ještě dnes.

Údaje sdílíme mezi kontejnerem a hostitelským systémem, ale též mezi vícerými kontejnery. No a díky obsahu (volume) se údaje ukládají pouze na hostitelský počítač (ne do kontejneru samotného), díky čemuž se s přibývajícími údaji nezvětšuje velikost kontejneru.

Sdílíme obsah mezi hostitelským systémem a kontejnerem

Tak jako v předešlé časti, i v této budeme pracovat s textovým konfiguračním souborem Dockerfile ve stejné složce ~/docker-test a se stejným obrazem (image) nginx-test. Rozdíl však bude v obsahu souboru Dockerfile. Nebudeme už totiž kopírovat soubor index.html z hostitelského systému do kontejneru, pouze na něj odkážeme. Obsah souboru Dockerfile si v textovém editoru nano upravíme takto:

nano Dockerfile

a vložíme tyto 2 řádky:

FROM nginx
WORKDIR /usr/share/nginx/html

Příkaz z prvního řádku spustí obraz s webovým serverem Nginx. Příkaz v druhém řádku zabezpečí, že se příkazový řádek v kontejneru celkem prakticky otevře ve složce html, kde se nachází soubor index.html. Takto můžeme okamžitě po přihlášení do kontejneru ověřit, jestli se soubor index.html nachází ve správné složce a jestli se jeho obsah doopravdy shoduje s tím na hostitelském počítači.

Soubor uložíme pomocí klávesové zkratky Ctrl + X a následně stlačením klávesy y a potvrzením klávesou enter.

Vytvoříme složku s názvem html a přemístíme do ní soubor index.html:

mkdir ~/docker-test/html && mv ~/docker-test/index.html ~/docker-test/html/

Sestavíme si obraz s nastaveními z konfiguračního souboru Dockerfile ve složce ~/docker-test přesně tak, jako v předešlé části (nezapomeneme zkopírovat i tu tečku na konci):

docker build -t nginx-test .

Po úspěšném sestavení obraz nginx-test spustíme. Oproti minulé části do procesu spuštění ale ještě přidáme jedno nastavení, které nám v kontejneru odkáže na obsah složky na hostitelském počítači (-v ~/docker-test/html:/usr/share/nginx/htm). Dvojtečkou (:) oddělujeme cestu ke složce na hostitelském počítači (zde ~/docker-test/html) a cestu ke složce v kontejneru (zde /usr/share/nginx/html). Cesta v hostitelskému počítači je vždy první (vlevo od dvojtečky) a cesta v kontejneru vždy druhá (vpravo od dvojtečky).:

docker run -d -v ~/docker-test/html:/usr/share/nginx/html nginx-test

Zjistíme si ID kontejneru (12 znaků z prvního sloupce), který byl spuštěný z obrazu nginx-test:

docker ps

…a přihlásíme se do příkazového řádku (bash) kontejneru (vaše ID se bude lišit):

docker exec -it aaaf9e616e0b bash

Díky příkazu WORKDIR v konfiguračním souboru Dockerfile jsme ve složce html, kde se nachází soubor index.html. Zde si ověříme, jestli funguje webový server Nginx a jaký je aktuální obsah souboru index.html:

curl localhost

V předešlé části jsme si do souboru index.html uložili uvítací větu “Ahoj z Docker kontejneru!”, takže se nám zobrazí i teď. Abychom si ověřili, jestli se změny v obsahu na hostitelském počítači projeví okamžitě i v kontejneru (bez opětovného mazaní, sestavování a spouštění obrazu), přidáme na hostitelském počítači ještě jeden řádek:

echo "Tuto větu jsme zapsali z hostitelského počítače." >> ~/docker-test/html/index.html

Opět si v kontejneru necháme vypsat aktuální obsah souboru index.html a zjistíme, že to, co jsme zapsali na hostitelském počítači, se okamžitě projeví i v kontejneru:

curl localhost

Nemuseli jsme už tedy kontejner zastavit, znovu sestavit a spustit obraz, ale stačilo pouze změnit obsah souboru na hostitelském počítači. Uzavřený kontejner z předešlé části jsme teď otevřeli tak, aby dokázal číst a zapisovat v souborech na hostitelském počítači. Kromě této výhody získáváme další: I po zastavení kontejneru a vymazaní obrazu budeme mít obsah souboru index.html stále zachovaný, jestli už jsme dělali změny v kontejneru nebo na hostitekském počítači.

Shrnutí

Ukázali jsme si, jak do kontejneru přidávat data pomocí obsahu (volume) tak, aby dokázal číst a zapisovat v souborech na hostitelském systému.

Aktualizováno: 12 října, 2021

Byl tento článek užitečný?

Related Articles

Zákaznická podpora
24 hodin denně, 7 dní v týdnu
KONTAKTOVAT PODPORU