Docker Swarm umožnuje pracovať s viacerými hostiteľskými systémami.
Docker Swarm môžeme preložiť ako roj kontajnerov, ktorý obyčajne sídli na viacerých hostiteľských systémoch. Jednotlivé inštalácie projektu Docker na konkrétnych hostiteľských systémoch sa z pohľadu nástroja Docker Swarm nazývajú uzly (nodes). Riadiace uzly sú manažéri (managers), ostatné uzly zase pracovníci (workers). Manažéri zadávajú pracovníkom úlohy (tasks), ktoré definujú v službách (services).
Inštalácia
Predstavíme si malú firmičku (resp. maličký roj), ktorá má jedného manažéra (majiteľa, riaditeľa) a ten zamestnáva dvoch pracovníkov (worker-1 a worker-2). Aby sme v nástroji Docker Swarm dokázali manažéra spojiť s pracovníkmi, potrebujeme zistiť IP adresy počítačov s uzlom typu manažér a tiež s uzlami typu pracovník. Ľudskou rečou: Manažér a pracovníci sa najskôr musia zoznámiť. Na všetkých troch počítačoch teda spustíme príkaz
hostname -I
a prvá IP adresa bude tá, ktorú potrebujeme použiť v tomto návode. Tu teda máme IP adresu manažéra 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 sa môžu líšiť.
Docker máme síce nainštalovaný na manažérskom hostiteľskom počítači, ale na ostatných dvoch (worker-1
a worker-2
) Docker ešte len treba nainštalovať. Prihlásime sa teda cez SSH na worker-1
(10.1.1.9) a worker-2
(10.1.1.10) a postupujeme takto:
V prvom rade je potrebné zabezpečiť aktuálnosť všetkých balíkov. Nainštalujeme teda všetok updatovaný softvér pomocou dvoch príkazov v jednej dávke:
sudo apt update && sudo apt upgrade
Ak systém nájde aktualizovateľné balíčky, takto sa opýta, či ich chcete začať inštalovať:
Do you want to continue? [Y/n]
Stlačíme kláves y
ak chceme začať aktualizačný proces alebo kláves n
, ak aktualizovať nechceme. Následne stlačíme kláves Enter
.
Na inštaláciu projektu Docker použijeme oficiálny skript, ktorý inštaláciu v termináli zjednoduší na 2 príkazy:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Po dokončení inštalácie na oboch hostiteľských počítačoch máme všetko pripravené a môžeme pristúpiť k používaniu nástroja Docker Swarm.
Manager
Na hostiteľskom počítači s IP adresou manažéra (tu 10.1.1.21
, vaša sa môže líšiť) vytvoríme swarm týmto príkazom:
docker swarm init --advertise-addr 10.1.1.21
Ďalší postup nám nástroj Docker Swarm vypíše hneď po vytvorení swarm-u na hostiteľskom manažérskom počítači. Na pripojenie pracovníka do roja máme na počítači s IP adresou prvého a tiež druhého pracovníka (tu 10.1.1.9
a 10.1.1.10
, vaše sa môžu líšiť) spustiť rovnaký príkaz:
docker swarm join --token SWMTKN-1-0e8pb0jgkf5fh0q9ttig4so3lhzdbwr1rha9dqcczvxryqdw27-1loythwbn59jxbkx2vj1qouxv 10.1.1.21:2377
Po vytvorení swarm-u na manažérskom hostiteľskom počítači sa vygeneruje unikátny identifikátor (token – tu SWMTKN-1-0e8pb0jgkf5fh0q9ttig4so3lhzdbwr1rha9dqcczvxryqdw27-1loythwbn59jxbkx2vj1qouxv
, váš sa bude líšiť). Ide vlastne o názov firmy, ktorý práve manažér firme určil. Všetci pracovníci, ktorí vo firme chcú pracovať (join
), musia okrem názvu (token
) poznať ešte aj jej IP adresu a port (tu 10.1.1.21:2377
, vaša sa môže líšiť). Ľudskou rečou: Manažér práve založil firmu, vybral jej názov, prijal dvoch pracovníkov a pracovníci práve nastúpili do práce (služby).
Že sa obaja pracovníci (worker-1
a worker-2
) naozaj úspešne pripojili, zistíme jednak z potvrdzujúcej správy na hostiteľských počítačoch pracovníkov, a tiež na manažérskom hostiteľskkom počítači pomocou príkazu, ktorý vypíše jednotlivé uzly (node) typu manažér a pracovník:
docker node ls
Vypíše sa nám teda zoznam manažérov a pracovníkov pripojených do swarm-u a všetky dôležité údaje o nich.
Na všetkých 3 uzloch (node) teraz potrebujeme spustiť webový server Nginx a otvoriť port zvnútra kontajnera na hostiteľský počítač (-p 80:8080). Pomocou nástroja Docker Swarm si vytvoríme službu, ktorú nazveme nginx-swarm-test
(--name nginx-swarm-test
) a určíme, že chceme 3 kópie webového servera Nginx (--replicas=3
). Aby sme mohli v príkazovom riadku po spustení služby ďalej pracovať, použijeme prepínač -d
. Spustíme teda tento príkaz na manažérskom hostiteľskom počítači:
docker service create --name nginx-swarm-test --replicas=3 -d -p 80:8080 nginx
Takto zabezpečíme, že sa na všetkých 3 hostiteľských počítačoch spustí webový server Nginx. Overíme, či je služba s názvom nginx-swarm-test
spustená (prvý riadok) a či sa v rámci tejto služby spustili úlohy (tasks) na všetkých 3 uzloch (druhý riadok). Ľudskou rečou: Manažér zadal úlohy sebe a rovnako obom pracovníkom v práci (službe).
docker service ls
docker service ps nginx-swarm-test
Keby sme sa chceli pozrieť, akú stránku nám webový server Nginx pošle na jednotlivých uzloch, stačí použiť nástroj curl a IP adresu uzla. Sme prihlásení na manažérskom hostiteľskom počítači a postupne zadáme tieto 3 príkazy:
curl localhost:8080
curl 10.1.1.9:8080
curl 10.1.1.10:8080
Zhrnutie
Ukázali sme si ako pomocou nástroja Docker Swarm pracovať s viacerými inštaláciami projektu Docker na viacerých hostiteľských systémoch.