Docker – 5. Compose

Docker Compose umožnuje spouštění a konfiguraci vícerých kontejnerů.

Docker Compose je samostatný nástroj od vývojářů projektu Docker, který slouží na spuštění izolovaného vícekontejnerového prostředí na jednom hostitelském systéme. Typicky jde o případy, jako jsme si už popisovali v předešlé časti: V jednom kontejneru máme spuštěný webový server a v druhém zase databázový server. Všechno potřebné na fungování a komunikaci zmíněných kontejnerů v izolovaném prostředí je možné jednoduše nastavit v textovém konfiguračním souboru formátu YAML docker-compose.yml. Výhodou takového zápisu nastavení je fakt, že na spuštění všech kontejnerů stačí jediný příkaz docker-compose up. Stejně tak restartujeme kontejnery s novými nastaveními, přičemž kontejnery s nezměněnými nastaveními zůstanou nedotknuté.

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

Instalace Docker Compose

Nástroj Docker Compose si stáhneme z oficiálního repozitáře na GitHub-e (aktuální odkaz v dokumentaci) a uložíme do složky /usr/local/bin/ (první řádek). Následně stáhnutému souboru přidáme práva na spuštění (druhý řádek). V tomto případě instalujeme verzi 1.27.4, pokud potřebujete jinou verzi, změňte označení na požadovanou verzi.

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Nastavujeme a spouštíme kontejnery

V předešlé časti jsme si spustili dva kontejnery, abychom je mohli přidat do stejné sítě pomocí sítě (network). Nástrojem obsah (volume) jsme kontejnerům řekli, aby používaly obsah hostitelského systému. Všechno jsme nastavili pomocí konfiguračního souboru Dockerfile a příkazového řádku. Teď si ukážeme, jak se to dá udělat systematičtěji pomocí nástroje Docker Compose.

Přesuneme se do složky ~/docker-test (první řádek), ve kterém složku html z minulé časti přejmenujeme na html-compose-1 (druhý řádek) a ten ještě zkopírujeme jako html-compose-2 (třetí řádek). V obou složkách je soubor s názvem index.html, který webový server Nginx zobrazí jako hlavní stránku:

cd ~/docker-test
mv html html-compose-1
cp -r html-compose-1 html-compose-2

Vytvoříme konfigurační soubor nástroje Docker Compose pod názvem docker-compose.yml:

nano docker-compose.yml

a zapíšeme do něj tyto nastavení:

version: "3.8"
services:
	nginx-test-compose-1:
		image: nginx
		volumes:
			- "./html-compose-1:/usr/share/nginx/html"
		networks:
			- sit-test
	nginx-test-compose-2:
		image: nginx
		volumes:
			- "./html-compose-2:/usr/share/nginx/html"
		networks:
			- sit-test
networks:
	sit-test:
		external: true

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

V prvním řádku musíme určit verzi formátu konfiguračního souboru (tu 3.8, vaše se může lišit). Správnou verzi si vybereme podle toho, jakou verzi projektu Docker máme nainstalovanou. Zde pomůže tabulka z oficiální dokumentace.

Jako druhé si nadefinujeme služby (services). V terminologii nástroje Docker Compose je služba vlastně to samé jako kontejner v terminologii projektu Docker. Zde si necháme spustit služby (kontejnery) s názvem nginx-test-compose-1 a nginx-test-compose-2. V každé službě určíme 3 nastavení: Z jakého obrazu (image) se služba (kontejner) bude sestavovat a spouštět, jaký obsah (volumes) hostitelského počítače má služba (kontejner) k dispozici a nakonec do jaké sítě (networks) službu (kontejner) zařadíme.

No a posledními třemi řádky určujeme, že síť pod názvem sit-test je externí, Docker ji předtím (v předešlé časti) vytvořil a Docker Compose do ní teď už len služby (kontejnery) zařadí.

Všechna potřebná nastavení jsme si tedy uložili a ke spuštění obou kontejnerů stačí jediný příkaz:

docker-compose up -d

Jestli se kontejnery spustily si ověříme tímto příkazem:

docker-compose ps

Když v konfiguračním souboru docker-compose.yml něco změníme a změnu potřebujeme aplikovat do jednotlivých kontejnerů, postačí opět spustit příkaz docker-compose up -d. Změněné kontejnery se restartují s novými nastaveními, nezměněné zůstanou spuštěné.

Ověřujeme funkčnost kontejnerů

Nejdřív zjistíme, jaké IP adresy (Containers > IPv4Address) mají spuštěné kontejnery v síti sit-test přidělené:

docker network inspect sit-test

Následně se přihlásíme do příkazového řádku (bash) prvního spuštěného kontejneru nginx-test-compose-1 (první řádek), ve kterém ověříme funkčnost a komunikaci obou kontejnerů (druhý řádek, vaše IP adresa se může lišit):

docker-compose exec nginx-test-compose-1 bash
curl 172.18.0.3

Pokud vidíme obsah souboru index.html, znamená to, že všechno funguje správně. Oba kontejnery jsou tedy spuštěné, využívají obsah hostitelského systému (soubor index.html) a jsou zařazené do stejné sítě s názvem sit-test.

Shrnutí

Ukázali jsme si, jak jednodušeji spustit vícero kontejnerů na jednom hostitelském systému pomocí Docker Compose.

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