Docker Swarm umožnuje pracovat s vícero hostitelskými systémy.
Docker Swarm můžeme přeložit jako roj kontejnerů, který obyčejně sídlí na vícerých hostitelských systémech. Jednotlivé instalace projektu Docker na konkrétních hostitelských systémech se z pohledu nástroje Docker Swarm nazývají uzly (nodes). Řídící uzly jsou manažeři (managers), ostatní uzly zase pracovníci (workers). Manažeři zadávají pracovníkům úlohy (tasks), které definují ve službách (services).
Instalace
Představíme si malou firmičku (resp. maličký roj), která má jednoho manažera (majitele, ředitele) a ten zaměstnává dva pracovníky (worker-1 a worker-2). Abychom v nástroji Docker Swarm dokázali manažera spojit s pracovníky, potřebujeme zjistit IP adresy počítačů s uzlem typu manažer a též s uzly typu pracovník. Řečeno lidsky: Manažer a pracovníci se nejdřív musí seznámit. Na všech třech počítačích tedy spustíme příkaz
hostname -I
a první IP adresa bude ta, kterou potřebujeme použít v tomto návodu. Zde tedy máme IP adresu manažera 10.1.1.21
, worker-1
má IP adresu 10.1.1.9
a worker-2
zase 10.1.1.10
. Vaše IP adresy se mohou lišit.
Docker máme sice nainstalovaný na manažerském hostitelském počítači, ale na ostatních dvou (worker-1
a worker-2
) je Docker ještě potřeba nainstalovat. Přihlásíme se tedy přes SSH na worker-1
(10.1.1.9) a worker-2
(10.1.1.10) a postupujeme takto:
V první řadě je potřeba zabezpečit aktuálnost všech balíků. Nainstalujeme tedy všechen updatovaný software pomocí dvou příkazů v jedné dávce:
sudo apt update && sudo apt upgrade
Pokud systém najde aktualizovatelné balíčky, takto se zeptá, jestli je chcete začít instalovat:
Do you want to continue? [Y/n]
Stlačíme klávesu y
když chceme začít aktualizační proces nebo klávesu n
, pokud aktualizovat nechceme. Následně stlačíme klávesu Enter
.
Na instalaci projektu Docker použijeme oficiální skript, který instalaci v terminálu zjednoduší na 2 příkazy:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Po dokončení instalace na obou hostitelských počítačích máme všechno připravené a můžeme přistoupit k používání nástroje Docker Swarm.
Manager
Na hostitelském počítači s IP adresou manažera (zde 10.1.1.21
, vaše se může lišit) vytvoříme swarm tímto příkazem:
docker swarm init --advertise-addr 10.1.1.21
Další postup nám nástroj Docker Swarm vypíše hned po vytvoření swarm-u na hostitelském manažerském počítači. Na připojení pracovníka do roje máme na počítači s IP adresou prvního a také druhého pracovníka (zde 10.1.1.9
a 10.1.1.10
, vaše se mohou lišit) spustit stejný příkaz:
docker swarm join --token SWMTKN-1-0e8pb0jgkf5fh0q9ttig4so3lhzdbwr1rha9dqcczvxryqdw27-1loythwbn59jxbkx2vj1qouxv 10.1.1.21:2377
Po vytvoření swarmu na manažerském hostitelském počítači se vygeneruje unikátní identifikátor (token – tu SWMTKN-1-0e8pb0jgkf5fh0q9ttig4so3lhzdbwr1rha9dqcczvxryqdw27-1loythwbn59jxbkx2vj1qouxv
, váš se bude lišit). Jde vlastně o název firmy, který právě manažer firmě určil. Všichni pracovníci, kteří ve firmě chtějí pracovat (join
), musí kromě názvu (token
) znát ještě i její IP adresu a port (zde 10.1.1.21:2377
, vaše se může lišit). Řečeno lidsky: Manažer právě založil firmu, vybral její název, přijal dva pracovníky a pracovníci právě nastoupili do práce (služby).
Že se oba pracovníci (worker-1
a worker-2
) opravdu úspěšně připojili, zjistíme jednak z potvrzující zprávy na hostitelských počítačích pracovníků, a též na manažerském hostitelském počítači pomocí příkazu, který vypíše jednotlivé uzly (node) typu manažer a pracovník:
docker node ls
Vypíše se nám tedy seznam manažerů a pracovníků připojených do swarmu a všechny důležité údaje o nich.
Na všech 3 uzlech (node) teď potřebujeme spustit webový server Nginx a otevřít port zevnitř kontejneru na hostitelský počítač (-p 80:8080). Pomocí nástroje Docker Swarm si vytvoříme službu, kterou nazveme nginx-swarm-test
(--name nginx-swarm-test
) a určíme, že chceme 3 kopie webového serveru Nginx (--replicas=3
). Abychom mohli v příkazovém řádku po spuštění služby dále pracovat, použijeme přepínač -d
. Spustíme tedy tento příkaz na manažerském hostitelském počítači:
docker service create --name nginx-swarm-test --replicas=3 -d -p 80:8080 nginx
Takto zabezpečíme, že se na všech 3 hostitelských počítačích spustí webový server Nginx. Ověříme, jestli je služba s názvem nginx-swarm-test
spuštěná (první řádek) a jestli se v rámci této služby spustily úlohy (tasks) na všech 3 uzlech (druhý řádek). Řečeno lidsky: Manažer zadal úlohy sobě a stejně tak oběma pracovníkům v práci (službě).
docker service ls
docker service ps nginx-swarm-test
Kdybychom se chtěli podívat, jakou stránku nám webový server Nginx pošle na jednotlivých uzlech, stačí použít nástroj curl a IP adresu uzlu. Jsme přihlášení na manažerském hostitelském počítači a postupně zadáme tyto 3 příkazy:
curl localhost:8080
curl 10.1.1.9:8080
curl 10.1.1.10:8080
Shrnutí
Ukázali jsme si jak pomocí nástroje Docker Swarm pracovat s vícerými instalacemi projektu Docker na vícerých hostitelských systémech.