Svet IT je neustále v pohybe. Je v pohybe, lebo sa neustále snaží splniť nové a nové požiadavky, ktoré sú na neho kladené. A pritom si pravidelne vytvára problémy, ktoré sa v ďalšom vývoji snažím riešiť. Medzi takéto problémy patrí napríklad možný rozdiel medzi vývojárovým a produkčným prostredím (kto by nepoznal známu vetu: „Ale na mojom počítači to ide.“), alebo komplexnú infraštruktúru, ktorá v sebe zahŕňa rôzne služby = kusy softvéru bežiace ako server. V neposlednom rade je tu problém, že doba sa zrýchľuje a vývojový cyklus a interval nasadzovania sa skracuje. Preto by to nasadzovanie malo byť čo najjednoduchšie. Tieto a ešte niekoľko ďalších problémov sa snaží riešiť nový typ softvérového nástroja – kontajnerový systém. Dnes sa pozrieme na azda najznámejší z nich – Docker.
Docker je pojem, ktorý sa objavil pár rokov dozadu a postupne ale isto sa dostal do povedomia väčšiny vývojárov a správcov informačných systémov. Docker je ďalší evolučný krok po virtuálnych strojoch. Tie umožňovali na jednom počítači/serveri spúšťať niekoľko samostatných (z veľkej miery) izolovaných operačných systémov. 6 až 8 rokov dozadu bola virtualizácia veľký pojem. Každý sa ju snažil použiť, lebo prinášala efektivitu využitia softvérových prostriedkov. A to je niečo, čo manažéri radi počúvajú. A do toho prišiel Docker a posunul veci ďalej.
Docker je systém, ktorý vie spustiť niekoľko nezávislých kontajnerov na jednom hosťujúcom počítači. Ten kontajner sa dá prirovnať k virtuálnemu stroju. Aspoň pre softvér, ktorý v ňom beží, sa to javí, že má kompletný operačný systém len pre seba. V skutočnosti sa ale spustením kontajnera nespustí komplet nový operačný systém. Len sa využijú niektoré možnosti Linuxového jadra, vďaka ktorým je možné vytvoriť izolované prostredie, v ktorom beží nejaký softvér. A výhody oproti virtuálnym strojom sú úspora systémových prostriedkov (kontajner je omnoho menej náročnejší na pamäť, disk atď ako virtuálny stroj) a rýchlosť, ktorou je možné s kontajnermi pracovať.
A aký softvér vlastne v tých kontajneroch beží? Kontajner s MySQL databázou. K tomu ďalší s Apachom a nainštalovaným PHP-čkom. Vedľa neho ďalší s MongoDB databázou. A k tomu napríklad jeden s Prometheusom a ďalší s Grafanou na monitorovanie systému. Hlavná myšlienka je jeden softvérový komponent v infraštruktúre = jeden kontajner. Takto je celá infraštruktúra ako veľká skladačka, v ktorej viete jednoducho časti pridávať/odoberať a meniť.
Na začiatku kontajner vzniká z takzvaného image. To je niečo ako šablóna kontajnera, z ktorej sa vyrobí jeho inštancia. Imagov je veľa, takže stačí vybrať zo zoznamu a rovno použiť. Ak vyvíjate vlastný softvér a chcete ho mať pekne v kontajneri, aby ste si ho vedeli ľahko nasadiť, tak si viete vlastný image vytvoriť (zostaviť).
Keď už si kontajner v Dockeri spustíte, tak ho viete potom štartovať, stopovať, pozerať jeho logy alebo v ňom vo vnútri spúšťať nejaké príkazy. To by mohlo byť všetko. Ale to by Docker nesmel byť tak zaujímavý nástroj, že sa časom okolo neho nevytvoril celý ekosystém, ktorý v sebe obsahuje kadečo zaujímavé. Poďme sa na to pozrieť.
Docker Machine – dnes už na internete existuje veľa služieb, ktoré vám umožňujú spustiť si viacero kontajnerov v ich bežiacom Docker systéme. Sú to v podstate Docker hosty a je ich veľa, a aby práca s nimi bola čo najjednoduchšia, vznikol Docker Machine, ktorý vám umožňuje pracovať so vzdialenými Docker hostami jednoducho cez command line. Je to nástroj, kde registrujete vzdialený host a potom len hovoríte, ktorý kontajner chcete na ktorom hoste (veľmi jednoducho povedané).
Docker Compose – ak chcete pomocou Dockera vytvoriť celú infraštruktúru – viacero kontajnerov vytvorených z image-ov, pričom im správne potrebujete nastaviť vlastnosti – výsledný skript môže byť pomerne dlhý. Aby sa to dalo všetko pekne automatizovať a prenášať, je tu Docker Compose. Základom je jeden popisný YAML súbor, v ktorom je povedané, čo všetko sa má pripraviť. Na základe neho sa dá rýchlo a jednoducho pripraviť celá sieť kontajnerov.
Docker Swarm – nevyhnutnou požiadavkou pri veľkých riešeniach je schopnosť high availability. Docker to rieši pomocou cluster a má na to nástroj, ktorý sa volá Docker Swarm. Ten sa postará, že na pripravený zoznam serverov nasadí požadované kontajnery, a to tak aby vytvorili cluster.
Portainer – ak nemáte radi command-line interface a ste skôr vizuálny typ, toto je rozhranie pre vás. Webovské rozhranie v kontajneri, ktorý nasadíte do Dockera a môžete spravovať.
Moby Project – Docker sa nejaký čas dozadu rozhodol vydať zverejniť zdrojové kódy, ktoré usporiadal do komponent, z ktorých je možné si zložiť vlastný Docker. To možno nie je až tak zaujímavé, ale samotný projekt je takým testovacím prostredím, kde Docker skúša rôzne veci, ktoré keď sa osvedčia, tak ich neskôr zaradí do oficiálneho releasu. Pre Docker nadšencov to môže byť miesto mnohých možností.
Takto by sme mohli pokračovať ďalej, kde na jednej úspešnej myšlienke sa postupne budujú ďalšie. Kľúčové je si uvedomiť, že Docker je nástroj, ktorý sa už masovo používa, má veľkú komunitu a ktorý sa neustále vyvíja. A hlavne funguje. Rieši problémy, na ktoré je určený a robí to pomerne dobre. Aj preto si za tých pár rokov získal toľko fanúšikov.