V predošlej časti tohto seriálu sme si predstavili koncept a nástroje projektu Docker a tiež sme si Docker nainštalovali. Spomenuli sme si, že základ tvoria kontajnery. V tejto časti si na príkladoch ukážeme, čo sa vlastne deje pred samotným spustením kontajnerov. Skrátka, budeme sa venovať obsahu textového konfiguračného súboru Dockerfile a tomu, ako ovplyvňuje spustenie obrazu (image).
Čo je Dockerfile a ako ho použiť
Dockerfile je konfiguračný textový súbor, do ktorého zapisujeme príkazy na automatizáciu zostavenia (build) a spustenia (run) obrazu (image). Môžeme napríklad nechať nainštalovať potrebný softvér či rôzne závislosti, aby sme zabezpečili stabilné vývojárske prostredie. Keď tvoríme súbor Dockerfile, dobrá prax je umiestniť ho do samostatného priečinka spolu so všetkými súbormi, ktoré chceme na zostavenie (build) a na spustenie (run) obrazu (image) použiť. Príklad s priečinkom s názvom docker-test
v domovskom priečinku prihláseného používateľa (vlnovka):
mkdir ~/docker-test && cd ~/docker-test
touch Dockerfile
Vytvorili sme si teda priečinok s názvom docker-test
v domovskom priečinku prihláseného používateľa (vlnovka), premiestnili sme sa doň (prvý riadok) a následne sme v prázdnom priečinku docker-test vytvorili textový súbor s názvom Dockerfile
(druhý riadok).
Pripravíme si veľmi jednoduchý súbor s názvom index.html
, ktorý neskôr necháme načítať cez webový server Nginx v kontajneri:
echo "Ahoj z Docker kontajnera!" > index.html
Aktuálne sa v priečinku docker-test nachádzajú 2 súbory: Dockerfile a index.html. Do súboru Dockerfile
si teraz zapíšeme, že chceme nainštalovať webový server Nginx (prvý riadok). Príkazom na druhom riadku, do obrazu skopírujeme súbor index.html
, ktorý neskôr zobrazíme cez Nginx. Otvoríme si súbor Dockerfile
v textovom editore nano
:
nano Dockerfile
a zapíšeme jednoduchý skript s 2 riadkami:
FROM nginx
COPY index.html /usr/share/nginx/html
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.
Príkazy FROM
a COPY
sú iba dva z ďalších podporovaných. V ostatných častiach tohto seriálu sa budeme zaoberať s viacerými príkazmi.
Zostavujeme a spúšťame obrazy (images)
Konfiguračný súbor Dockerfile
máme pripravený a teraz môžeme zostaviť (build) a spustiť (run) obraz (image). Aby sme si overili správnosť napísaného skriptu v súbore Dockerfile
, necháme na základe jeho obsahu zostaviť obraz s názvom nginx-test
(nezabudneme skopírovať aj tú bodku na konci):
docker build -t nginx-test .
Následne zistíme, či je zostavený obraz v zozname obrazov:
docker image ls
Keďže sme doteraz nezostavovali žiadne iné obrazy, vypíšu sa 2 obrazy. Jeden s názvom nginx
a druhý nginx-test
. Ten prvý je základný obraz, na ktorom je postavený ten druhý. Do druhého sme skopírovali súbor index.html, preto budeme spúšťať práve tento obraz:
docker run -d nginx-test
Že sa obraz s názvom nginx-test spustil a vytvoril tak kontajner s webovým serverom Nginx, zistíme pomocou príkazu:
docker ps
Vypísal sa zoznam spustených kontajnerov. Aby sme sa do kontajnera dostali a zistili, či v ňom všetko funguje ako má, potrebujeme CONTAINER ID (12 znakov z prvého stĺpca – tu be08a567a805
, vaše sa budú líšiť). Takto sa teda do kontajnera dostaneme:
docker exec -it be08a567a805 bash
Získali sme prístup do príkazového riadku (bash) vo vnútri kontajnera be08a567a805
a teraz už iba stačí vyskúšať, či webový server Nginx funguje a naozaj zobrazí obsah súboru index.html:
curl localhost
Po spustení príkazu sa nám zobrazí obsah súboru index.html
(Ahoj z Docker kontajnera!), čo znamená, že webový server Nginx funguje a zobrazuje správny obsah.
Spustený kontajner ukončíme (prvý riadok) a vymažeme (druhý riadok):
docker stop be08a567a805
docker rm be08a567a805
Teraz môžeme zmeniť obsah súboru index.html
v priečinku docker-test
a opäť zostaviť (build) a spustiť (run) obraz (image) s názvom nginx-test
, ako píšeme vyššie.
Aby sme pri každej zmene obsahu súboru index.html
nemuseli ukončovať, mazať, zostavovať a spúšťať obraz prcujeme s obsahom (volume).
Zhrnutie
Ukázali sme si ako zostaviť (build) a spustiť (run) obraz (image) s konkrétnymi nastaveniami, ktoré sme zapísali do textového konfiguračného súboru Dockerfile
. Dostali sme sa do vnútra spusteného obrazu (čiže do kontajnera), aby sme si overili, že všetko funguje správne.