7.4 Docker
7.4 Docker
Docker je Open Source projekt umožňujúci nasadenie aplikácií do softvérových kontajnerov. Docker kontajner zabaľuje časť softvéru do kompletného súborového systému, ktorý obsahuje všetko potrebné pre jeho beh (kód, runtime, systémové nástroje, systémové knižnice). Tento prístup zaručuje bezproblémový beh aplikácie bez ohľadu na prostredie, v ktorom beží
V Linuxe využíva Docker existujúce virtualizačné a izolačné funkcie dostupné v jadre Linuxu (najme cgroups a namespaces) a UFS.
Namespaces zabezpečujú pre Docker požadovanú izoláciu, t.j. aby kontajnery zobrazovali iba vlastné prostredie. Kontajnery tak:
- neovplyvnia ostatné kontajnery ani hostiteľské prostredie,
- majú obmedzený prístup k súborovému systému a dávajú kontajnerom všetky práva, ktoré sú nad úrovňou kontajnera,
- poskytujú vlastné virtuálne sieťové adaptéry, ktoré umožňujú prideliť jedinečnú IP adresu a názov hostiteľa pre každý kontajner.
Cgroups zabezpečujú rovnováhu medzi zdrojmi t.j. zabezpečujú prideľovanie zdrojov každému kontajneru a zabraňujú nadmernému využívaniu daných zdrojov niektorým z kontajnerov.
UFS (Union File System) je súborový systém ktorý umožňuje, aby sa niekoľko systémových súborov navzájom prekrývalo a javilo sa ako jeden súborový systém. Obraz súborového systému je tvorený viacerými vrstvami - každá vrstva je systémový súbor určený len na čítanie a každá z týchto vrstiev je zahrnutá v každej inštrukcii, ktorá je uvedená v súboroch Dockerfiles. Docker má viaceré dostupné ovládače úložiska pre UFS, tie sú však väčšinou závislé od systému.
Vďaka UFS je v Dockeri každá nová vrstva umiestnená na vrchu predchádzajúcich vrstiev. Posledná vrstva sa zobrazí po spustení obrazu ako kontajner.
Obr. 2 Architektúra Docker kontajnera
Docker Engine ešte pridáva nad všetky predchádzajúce vrstvy súborový systém na čítanie a zápis, ako aj ďalšie parametre nastavenia, ako napríklad meno, ID, zdroj, limity a IP adresu. Okrem toho je možné v UFS zdieľať bežné súbory a knižnice.
Komponenty Docker architektúry
Docker Engine - je základná súčasť technológie Docker. Umožňuje tvorbu, beh a správu kontajnerov, čo je zabezpečované prostredníctvom Docker démona ktorý beží na pozadí hosťujúceho systému. Na komunikáciu s ním je použitý protokol http. Pomocou Docker klienta možno ovládať vzdialeného Docker démona, ktorý beží napr. na inom serveri. Docker klient je prostredie príkazového riadku pre používateľov, ktorí komunikujú s Docker démonom.
Docker obraz – je to jedna zo základných súčastí systému Docker (základná jednotka, alebo šablóna pre tvorbu kontejnerov). Obrazy sú zdielané cez Docker HUB. Každý používateľ Docker, si môže vytvoriť vlastný obraz a potom ho zdielať na Docker HUB-e. Docker HUB poskytuje mnoho oficiálnych obrazov: jednotlivých OS (Ubuntu, Debian, CentOS), alebo konkrétnych programov, aplikácií a technológií (napr. MySQL).
Docker kontajner - je jeden z komponentov Docker. Kontajnery sú vytvorené a rozmiestnené pomocou obrazov, ktoré obsahujú niektoré aplikácie a služby a jeden alebo viac procesov, ktoré sú spustené vo vnútri kontajnera.
Obrazy sú považované za základný stavebný prvok systému Docker a kontajnery za jeho výkonnú funkciu.
Každý kontajner má vo vnútri jediný softvérový obraz a má schopnosť vykonávať množstvo operácií, ako je vytváranie, spustenie, zastavenie, odstraňovanie a presun kontajnerov.
Docker Registry je služba alebo tiež register pre ukladanie a zdieľanie Docker obrazov. Východiskovým a oficiálnym registrom je Docker HUB (každý si môže na svojom serveri prevádzkovať svoj vlastný register).
Obr. 3 Spustenie Docker kontajnera
Ako príklad uvedieme postup spustenia kontajnera, ktorý obsahuje operačný systém Linux (vid. Obr. 3):
- Docker klient kontaktuje Docker démona so žiadosťou o spustenie kontajnera, ktorý je vytvorený z obrazu Linux OS.
- Docker démon skontroluje, či je obraz dostupný na lokálnom počítači. Ak nie, tak ho stiahne z registra Docker HUB.
- Ak je obraz dostupný, vytvorí z neho nový kontajner a spustí v ňom definovaný proces, napr. „bash“.
Práca s docker kontajnermi vyžaduje práva administrátora. Častým riešením je dať práva na prácu s kontajnermi vybranému používateľovi. Postup udelenia práv používateľovi „student“ je nasledovný:
usermod -aG
docker student
systemctl enable
docker
Ďalšie nástroje na podporu Docker kontajnerov
Docker Compose - je nástroj
na definovanie a spustenie multikontajnerovej Docker
aplikácie. Zjednodušuje konfiguráciu a nasadenie kontajnerov a aplikácií.
Na popis konfigurácie používa čitateľné súbory s koncovkou .yml a .yaml.
Docker
SWARM - je
riešenie pre vytvorenie klastra z viacerých serverov, na ktorých je
nainštalovaný Docker. (Pôvodne išlo o samostatný nástroj,
od verzie 1.12 je integrovaný do Docker Engine.) SWARM
je tvorený jedným alebo viacerými Docker Engine, ktoré využívajú funkciu „swarmkit“
pre všetky funkcie správy klastra a orchestrácie. Režim SWARM sa môže
povoliť buď vytvorením nového alebo pripojením existujúceho SWARM klastra.
SWARM je tvorený tzv. uzlami (Docker Engine). Existujú dva typy uzlov:
- správcovia (manager)
- pracovné uzly (worker)
Obr. 4 Docker SWARM
Docker SWARM uzly vykonávajú tiež funkciu orchestrácie klastra, ktorá je potrebná na udržanie požadovaného stavu. V rámci SWARM môže byť niekoľko správcovských uzlov, ale vždy len jeden tzv. líder. SWARM líder je zvolený všetkými ostatnými správcami a vykonáva všetky úlohy orchestrácie.
Pracovné uzly prijímajú a vykonávajú úlohy z uzlov správcu. V predvolenom nastavení sú uzly správcu tiež pracovné uzly, ale môžu byť nakonfigurované tak, aby neprijímali žiadne pracovné zaťaženie. Na každom pracovnom uzle je agent, ktorý posiela hlásenia o stave svojich úloh správcom.
Pri používaní Docker SWARM sa nepublikujú kontajnery, ale služby. Služba je definícia jednej, alebo viacerých úloh, ktoré sa majú vykonať na pracovných uzloch. Pri vytváraní služby je potrebné určiť obraz kontajnera, ktorý sa má použiť a príkazy, ktoré sa majú vykonať vo vnútri kontajnerov.
Služba môže byť globálna alebo replikovaná. Rozdiel medzi nimi je nasledovný:
- globálna služba – spustí sa raz na každom dostupnom uzle,
- replikovaná služba - správca distribuuje daný počet úloh na uzly na základe požadovaného počtu replík.
Architektúra siete Docker
Docker kontajnery a služby je možné prepájať priamo na hosťovskom OS. V predvolenom nastavení sú ovládače, ktoré poskytujú funkčnosti:
- Bridge - predvolený ovládač. Používa sa, keď aplikácie bežia v samostatných kontajneroch, ktoré potrebujú medzi sebou komunikovať.
- Host - pre samostatné kontajnery odstraňuje izoláciu siete a to menovite medzi kontajnerom a hostiteľom Docker pre priame použite siete hostiteľa.
- Macvlan - umožňujú priradiť kontajneru MAC adresu, čím sa v sieti zobrazí ako fyzické zariadenie.
- None - pri tejto voľbe sa na kontajneri vypínajú všetky siete. Obvykle sa používa v spojení s vlastným ovládačom siete.
- Overlay - prekrývajúce siete spájajú viacero démonov Docker a umožňujú navzájom komunikovať službám v rámci SWARM. Môžu sa použiť aj na uľahčenie komunikácie medzi SWARM službou a samostatným kontajnerom alebo medzi dvoma samostatnými kontajnermi na rôznych démonoch Docker. (Odstraňuje potrebu robiť smerovanie na úrovni OS medzi kontajnermi.)
Obr. 5 Docker Overlay sieť
Overlay sieťové prepojenie v Dockeri používa tunely VXLAN (VXLAN umožňujú vytvárať virtuálnu sieť druhej vrstvy nad existujúcou infraštruktúrou tretej vrstvy.) Každý koniec tunelu VXLAN je ukončený koncovým bodom VXLAN Tunnel Endpoint (VTEP). Ten vykonáva zapuzdrenie, rozbalenie a ďalšie procesy, ktoré sú potrebné pre prenos.