V předešlé časti tohoto seriálu jsme si představili koncept a nástroje projektu Docker a též jsme si Docker nainstalovali. Zmínili jsme si, že základ tvoří kontejnery. V této časti si na příkladech ukážeme, co se vlastně děje před samotným spuštěním kontejnerů. Zkrátka, budeme se věnovat obsahu textového konfiguračního souboru Dockerfile a tomu, jak ovlivňuje spuštění obrazu (image).
Co je Dockerfile a jak ho použít
Dockerfile je konfigurační textový soubor, do kterého zapisujeme příkazy na automatizaci sestavení (build) a spuštění (run) obrazu (image). Můžeme například nechat nainstalovat potřebný software či různé závislosti, abychom zabezpečili stabilní vývojářské prostředí. Když tvoříme soubor Dockerfile, dobrá praxe je umístit ho do samostatné složky spolu se všemi soubory, které chceme na sestavení (build) a na spuštění (run) obrazu (image) použít. Příklad se složkou s názvem docker-test
v domovské složce přihlášeného uživatele (vlnovka):
mkdir ~/docker-test && cd ~/docker-test
touch Dockerfile
Vytvořili jsme si tedy složku s názvem docker-test
v domovské složce přihlášeného uživatele (vlnovka), přemístili jsme se do něj (první řádek) a následně jsme v prázdné složce docker-test vytvořili textový soubor s názvem Dockerfile
(druhý řádek).
Připravíme si velmi jednoduchý soubor s názvem index.html
, který později necháme načíst přes webový server Nginx v kontejneru:
echo "Ahoj z Docker kontejneru!" > index.html
Aktuálně se ve složce docker-test nacházejí 2 soubory: Dockerfile a index.html. Do souboru Dockerfile
si teď zapíšeme, že chceme nainstalovat webový server Nginx (první řádek). Příkazem na druhém řádku, do obrazu zkopírujeme soubor index.html
, který později zobrazíme přes Nginx. Otevřeme si soubor Dockerfile
v textovém editoru nano
:
nano Dockerfile
a zapíšeme jednoduchý skript se 2 řádky:
FROM nginx
COPY index.html /usr/share/nginx/html
Soubor uložíme pomocí klávesové zkratky Ctrl + X
a následně stlačením klávesy y
a potvrzením klávesou enter.
Příkazy FROM
a COPY
jsou pouze dva z dalších podporovaných. V ostatních částech tohoto seriálu se budeme zaobírat s vícerými příkazy.
Sestavujeme a spouštíme obrazy (images)
Konfigurační soubor Dockerfile
máme připravený a teď můžeme sestavit (build) a spustit (run) obraz (image). Abychom si ověřili správnost napsaného skriptu v souboru Dockerfile
, necháme na základě jeho obsahu sestavit obraz s názvem nginx-test
(nezapomeneme zkopírovat i tu tečku na konci):
docker build -t nginx-test .
Následně zjistíme, jestli je sestavený obraz v seznamu obrazů:
docker image ls
Jelikož jsme doteď nesestavovali žádné jiné obrazy, vypíšou se 2 obrazy. Jeden s názvem nginx
a druhý nginx-test
. Ten první je základní obraz, na kterém je postavený ten druhý. Do druhého jsme zkopírovali soubor index.html, proto budeme spouštět právě tento obraz:
docker run -d nginx-test
Že se obraz s názvem nginx-test spustil a vytvořil tak kontejner s webovým serverem Nginx, zjistíme pomocí příkazu:
docker ps
Vypsal se seznam spuštěných kontejnerů. Abychom se do kontejneru dostali a zjistili, jestli v něm všechno funguje jak má, potřebujeme CONTAINER ID (12 znaků z prvního sloupce – zde be08a567a805
, vaše se budou lišit). Takto se tedy do kontejneru dostaneme:
docker exec -it be08a567a805 bash
Získali jsme přístup do příkazového řádku (bash) ve vnitřku kontejneru be08a567a805
a teď už pouze stačí vyzkoušet, jestli webový server Nginx funguje a opravdu zobrazí obsah souboru index.html:
curl localhost
Po spuštění příkazu se nám zobrazí obsah souboru index.html
(Ahoj z Docker kontejneru!), což znamená, že webový server Nginx funguje a zobrazuje správný obsah.
Spuštěný kontejner ukončíme (první řádek) a vymažeme (druhý řádek):
docker stop be08a567a805
docker rm be08a567a805
Teď můžeme změnit obsah souboru index.html
ve složce docker-test
a opět sestavit (build) a spustit (run) obraz (image) s názvem nginx-test
, jak píšeme výše.
Abychom při každé změně obsahu souboru index.html
nemuseli ukončovat, mazat, sestavovat a spouštět obraz, pracujeme s obsahem (volume).
Shrnutí
Ukázali jsme si jak sestavit (build) a spustit (run) obraz (image) s konkrétními nastaveními, které jsme zapsali do textového konfiguračního souboru Dockerfile
. Dostali jsme se do vnitra spuštěného obrazu (čili do kontejneru), abychom si ověřili, že všechno funguje správně.