Docker – 3. Volume

V tejto časti začneme kontajner používať Volume (obsah) pre prácu s perzistnentnými dátami.

V predošlej časti sme si naznačili, že ak chceme meniť obsah súboru index.html, nastáva komplikácia. Aby sme túto komplikáciu vyriešili, súbor index.html nebudeme kopírovať do kontajnera pri každom spustení (run) obrazu (image) nanovo. Namiesto toho jednoducho na súbor index.html na hostiteľskom systéme odkážeme. Kontajner tak nebude obsah súboru načítavať zvnútra (zo svojho súborového systému), ale zvonka (zo súborového systému hostiteľského systému). Ide o rýchlejší spôsob spúšťania a používania obrazov (images), vďaka ktorému navyše pri vymazaní kontajnera neprídeme o potrebný obsah (napr. ten zo súboru index.html).

Tip: Docker beží výborne vo WebSupport VPS. Vyskúšajte prémiový virtuálny server ešte dnes.

Údaje zdieľame medzi kontajnerom a hostiteľským systémom, ale tiež medzi viacerými kontajnermi. No a vďaka obsahu (volume) sa údaje ukladajú iba na hostiteľský počítač (nie do kontajnera samotného), vďaka čomu sa s pribúdajúcimi údajmi nezväčšuje veľkosť kontajnera.

Zdieľame obsah medzi hostiteľským systémom a kontajnerom

Tak ako v predošlej časti, aj v tejto budeme pracovať s textovým konfiguračným súborom Dockerfile v rovnakom priečinku ~/docker-test a s rovnakým obrazom (image) nginx-test. Rozdiel však bude v obsahu súboru Dockerfile. Nebudeme už totiž kopírovať súbor index.html z hostiteľského systému do kontajnera, iba naň odkážeme. Obsah súboru Dockerfile si v textovom editore nano upravíme takto:

nano Dockerfile

a vložíme tieto 2 riadky:

FROM nginx
WORKDIR /usr/share/nginx/html

Príkaz z prvého riadku spustí obraz s webovým serverom Nginx. Príkaz v druhom riadku zabezpečí, že sa príkazový riadok v kontajneri celkom prakticky otvorí v priečinku html, kde sa nachádza súbor index.html. Takto môžeme okamžite po prihlásení do kontajnera overiť, či sa súbor index.html nachádza v správnom priečinku a či sa jeho obsah naozaj zhoduje s tým na hostiteľskom počítači.

Súbor uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom enter.

Vytvorime priečinok s názvom html a premiestnime doň súbor index.html:

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

Zostavíme si obraz s nastaveniami z konfiguračného súboru Dockerfile v priečinku ~/docker-test presne tak, ako v predošlej časti (nezabudneme skopírovať aj tú bodku na konci):

docker build -t nginx-test .

Po úspešnom zostavení obraz nginx-test spustíme. Oproti minulej časti do procesu spustenia ale ešte pridáme jedno nastavenie, ktoré nám v kontajneri odkáže na obsah priečinku na hostiteľskom počítači (-v ~/docker-test/html:/usr/share/nginx/htm). Dvojbodkou (:) oddeľujeme cestu k priečinku na hostiteľskom počítači (tu ~/docker-test/html) a cestu k priečinku v kontajneri (tu /usr/share/nginx/html). Cesta v hostiteľskom počítači je vždy prvá (vľavo od dvojbodky) a cesta v kontajneri vždy druhá (vpravo od dvojbodky).:

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

Zistíme si ID kontajnera (12 znakov z prvého stĺpca), ktorý bol spustený z obrazu nginx-test:

docker ps

…a prihlásime sa do príkazového riadku (bash) kontajnera (vaše ID sa bude líšiť):

docker exec -it aaaf9e616e0b bash

Vďaka príkazu WORKDIR v konfiguračnom súbore Dockerfile sme v priečinku html, kde sa nachádza súbor index.html. Tu si overíme, či funguje webový server Nginx a aký je aktuálny obsah súboru index.html:

curl localhost

V predošlej časti sme si do súboru index.html uložili uvítaciu vetu “Ahoj z Docker kontajnera!”, takže sa nám zobrazí aj teraz. Aby sme si overili, či sa zmeny v obsahu na hostiteľskom počítači prejavia okamžite aj v kontajneri (bez opätovného mazania, zostavovania a spustenia obrazu), pridáme na hostiteľskom počítači ešte jeden riadok:

echo "Túto vetu sme zapísali z hostiteľského počítača." >> ~/docker-test/html/index.html

Opäť si v kontajneri necháme vypísal aktuálny obsah súboru index.html a zistíme, že to, čo sme zapísali na hostiteľskom počítači, sa okamžite prejaví aj v kontajneri:

curl localhost

Nemuseli sme už teda kontajner zastaviť, znovu zostaviť a spustiť obraz, ale stačilo iba zmeniť obsah súboru na hostiteľskom počítači. Uzavretý kontajner z predošlej časti sme teraz otvorili tak, aby dokázal čítať a zapisovať v súboroch na hostiteľskom počítači. Okrem tejto výhody získavame ďalšiu: Aj po zastavení kontajnera a vymazaní obrazu budeme mať obsah súboru index.html stále zachovaný, či už sme robili zmeny v kontajneri alebo na hostiteľskom počítači.

Zhrnutie

Ukázali sme si ako kontajner do kontajnera pridávať dáta pomocou obsahu (volume) tak, aby dokázal čítať a zapisovať v súboroch na hostiteľskom systéme.

Aktualizované 6. novembra 2020

Bol pre vás tento návod nápomocný?

Mohlo by vás tiež zaujímať:

Spýtajte sa nás, radi poradíme
Po - Ne 8:00-22:00
Kontaktovať podporu