Docker Compose umožnuje spúštanie a konfiguráciu viacerých kontajnerov.
Docker Compose je samostatný nástroj od vývojárov projektu Docker, ktorý slúži na spustenie izolovaného viackontajnerového prostredia na jednom hostiteľskom systéme. Typicky ide o prípady ako sme si už popisovali v predošlej časti: V jednom kontajneri máme spustený webový server a v druhom zase databázový server. Všetko potrebné na fungovanie a komunikáciu spomenutých kontajnerov v izolovanom prostredí je možné jednoducho nastaviť v textovom konfiguračnom súbore formátu YAML docker-compose.yml
. Výhodou takéhoto zápisu nastavení je fakt, že na spustenie všetkých kontajnerov stačí jediný príkaz docker-compose up
. Rovnako reštartujeme kontajnery s novými nastaveniami, pričom kontajnery s nezmenenými nastaveniami ostanú nedotknuté.
Inštalácia Docker Compose
Nástroj Docker Compose si stiahneme z oficiálneho repozitára na GitHub-e (aktuálny odkaz v dokumentácii) a uložíme do priečinka /usr/local/bin/
(prvý riadok). Následne stiahnutému súboru pridáme práva na spustenie (druhý riadok). V tomto prípade inštalujeme verziu 1.27.4, ak potrebujete inú verziu, zmeňte označenie na požadovanú verziu.
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 spúšťame kontajnery
V predošlej časti sme si spustili dva kontajnery, aby sme ich mohli pridať do rovnakej siete pomocou siete (network). Nástrojom obsah (volume) sme kontajnerom povedali, aby používali obsah hostiteľského systému. Všetko sme nastavili pomocou konfiguračného súboru Dockerfile
a príkazového riadku. Teraz si ukážeme, ako sa to dá systematickejšie pomocou nástroja Docker Compose.
Presunieme sa do priečinka ~/docker-test
(prvý riadok), v ktorom priečinok html z minulej časti premenujeme na html-compose-1
(druhý riadok) a ten ešte skopírujeme ako html-compose-2
(tretí riadok). V oboch priečinkoch je súbor s názvom index.html
, ktorý webový server Nginx zobrazí ako hlavnú stránku:
cd ~/docker-test
mv html html-compose-1
cp -r html-compose-1 html-compose-2
Vytvoríme konfiguračný súbor nástroja Docker Compose pod názvom docker-compose.yml
:
nano docker-compose.yml
a zapíšeme doň tieto nastavenia:
version: "3.8"
services:
nginx-test-compose-1:
image: nginx
volumes:
- "./html-compose-1:/usr/share/nginx/html"
networks:
- siet-test
nginx-test-compose-2:
image: nginx
volumes:
- "./html-compose-2:/usr/share/nginx/html"
networks:
- siet-test
networks:
siet-test:
external: true
Obsah súboru uložíme pomocou klávesovej skratky Ctrl + X
a následne stlačením klávesu y
a potvrdením klávesom Enter
.
V prvom riadku musíme určiť verziu formátu konfiguračného súboru (tu 3.8
, vaša sa môže líšiť). Správnu verziu si vyberieme podľa toho, akú verziu projektu Docker máme nainštalovanú. Tu pomôže tabuľka z oficiálnej dokumentácie.
Ako druhé si zadefinujeme služby (services
). V terminológii nástroja Docker Compose je služba vlastne to isté ako kontajner v terminológii projektu Docker. Tu si necháme spustiť služby (kontajnery) s názvom nginx-test-compose-1
a nginx-test-compose-2
. V každej službe určíme 3 nastavenia: Z akého obrazu (image) sa služba (kontajner) bude zostavovať a spúšťať, aký obsah (volumes) hostiteľského počítača má služba (kontajner) k dispozícii a napokon do akej siete (networks) službu (kontajner) zaradíme.
No a posledné tri riadky určujeme, že sieť pod názvom siet-test
je externá, Docker ju predtým (v predošlej časti) vytvoril a Docker Compose do nej teraz už len služby (kontajnery) zaradí.
Všetky potrebné nastavenia sme si teda uložili a na spustenie oboch kontajnerov stačí jediný príkaz:
docker-compose up -d
Či sa kontajnery spustili, si overíme týmto príkazom:
docker-compose ps
Ak v konfiguračnom súbore docker-compose.yml
niečo zmeníme a zmenu potrebujeme aplikovať do jednotlivých kontajnerov, postačí opäť spustiť príkaz docker-compose up -d
. Zmenené kontajnery sa reštartujú s novými nastaveniami, nezmenené zostanú spustené.
Overujeme funkčnosť kontajnerov
Najskôr zistíme, aké IP adresy (Containers > IPv4Address) majú spustené kontajnery v sieti siet-test
pridelené:
docker network inspect siet-test
Následne sa prihlásime do príkazové riadku (bash) prvého spusteného kontajnera nginx-test-compose-1
(prvý riadok), v ktorom overíme funkčnosť a komunikáciu oboch kontajnerov (druhý riadok, vaša IP adresa sa môže líšiť):
docker-compose exec nginx-test-compose-1 bash
curl 172.18.0.3
Ak vidíme obsah súboru index.html
, znamená to, že všetko funguje správne. Oba kontajnery sú teda spustené, využívajú obsah hostiteľského systému (súbor index.html
) a sú zaradené do rovnakej siete s názvom siet-test
.
Zhrnutie
Ukázali sme si ako jednoduchšie spustiť viacero kontajnerov na jednom hostiteľskom systéme pomocou Docker Compose.