Containerizácia ?

Čo je to containerizácia ? aké výhody mi prinesie pri nasadzovaní aplikácie ? Ake nástroje nato môžem použiť ?

2 odpovede
Kontainerizácia je technológia, ktorá umožňuje zapúzdriť aplikáciu a jej závislosti do izolovaného a prenositeľného balíka nazývaného kontajner. Kontajner obsahuje všetko, čo aplikácia potrebuje na svoje fungovanie, vrátane kódu, knižníc, konfiguračných súborov a ďalších závislostí.

Využitie containerizácie pri nasadzovaní aplikácie prináša niekoľko výhod. Tu je niekoľko hlavných prínosov:

Izolácia: Kontajnery poskytujú izoláciu medzi aplikáciami a ich prostredím, čo znamená, že môžu bežať na akomkoľvek systéme, bez ohľadu na konkrétnu konfiguráciu prostredia. To zabezpečuje, že aplikácia bude fungovať rovnako bez ohľadu na cieľový systém.

Prenositeľnosť: Kontajnery sú nezávislé od hostiteľského operačného systému a infraštruktúry, na ktorej bežia. Môžu byť ľahko nasadené na rôznych platformách vrátane fyzických serverov, virtuálnych strojov a cloudových prostredí. To uľahčuje presun aplikácií medzi rôznymi prostrediami a znižuje závislosť na špecifických konfiguráciách.

Škálovateľnosť: Kontajnery umožňujú rýchlu a jednoduchú horizontálnu škálovateľnosť, čo znamená, že môžete rýchlo pridávať alebo odstraňovať inštancie aplikácie podľa aktuálneho zaťaženia. To umožňuje efektívne využívanie zdrojov a zabezpečuje, že aplikácia je stále dostupná a odolná voči výpadkom.

Jednoduché nasadenie: Containerizácia prináša jednoduchosť pri nasadzovaní aplikácií. Kontajnery môžu byť ľahko vytvorené, testované a distribuované ako samostatné balíky. Súčasťou toho je aj možnosť použiť nástroje na automatizované nasadzovanie, ktoré zjednodušujú a zrýchľujú celý proces.

Pri nasadzovaní aplikácie pomocou kontajnerov potrebujete správny kontajnerový softvér, ako napríklad Docker, Podman alebo buildah , ktorý umožňuje vytváranie a správu kontajnerov. Aplikáciu môžete zapuzdriť do kontajnera vrátane všetkých závislostí a konfigurácií, a potom túto kontajnerovú inštanciu nasadiť na požadovaný cieľový systém.

Dá sa povedať že nasadzovanie pomocou kontainerov je v dnešnej dobe už standart. Ak by si sa o tom chcel dozvedieť viac, prípadne si pozriet príklady z praxe alebo si napísať Dockerfile pre svoju aplikáciu tak mi kludne napís :)
"Kontajner obsahuje všetko, čo aplikácia potrebuje na svoje fungovanie, vrátane kódu, knižníc, konfiguračných súborov a ďalších závislostí." -
Nutne dodat, ze kontajner nema obsahovat inu aplikaciu ako zavislost, t.z. ze kontajnerizovany Wordpress neobsahuje napr. databazovy server. Typicky kontajner pocas svojho zivotneho cyklu spusta a spravuje len jeden proces.

Ostatne zavislosti (zavisle aplikacie a sluzby) sa definuju napr. pomocou docker-compose a "vytacaju" (spustaju) sa ako jedna entita (viacero kontajnerov na sebe zavislych prepojenych spolocnou virtualnou sietou alebo cez SHM [shared memory]).
Dalej je nutne dodat, ze kontajnery urcene na horizontalne skalovanie su standardne tzv. "ephemeral" - t.z. ze su brane ako postradatelne a neocakava sa ze po pade alebo umyselnom ukonceni zacnu pracovat tam, kde skoncili. To ma vplyv na ich ulozny priestor (storage), ktory nie je trvaly. Pri orchestracii (sprave a skalovani) kontajnerov napr. cez Kubernetes moze prist k nasilnemu, okamzitemu ukonceniu kontajneru v akomkolvek momente z roznych dovodov (planovana/nepalnovana udrzba, vyvazovanie zdrojov [presuvanie na menej vytazeny nod/server], redukovanie skaly [znizovanie poctu rovnakych kontajnerov z dovodu nizkeho vytazenia], atd.)

Kontajnerizaci ako taka ma mensie dodatocne naroky na hardver ako virtualizacia, avsak nie je az taka bezpecna. Kontajnerizacia (narozdiel od virtualizacie, ktora zarucuje izolaciu formou virtualnej abrstrakcie na urovni hardveru) je zabezpecena len formou izolacie na urovni linuxoveho jadra (t.z. ze kazdy kontajner zdiela to iste linuxove jadro hostovskeho operacneho systemu) co predstavuje svoje vlastne problemy a obmedzenia. Ako priklad mozno uviest, ze kontajner by nemal standardne vediet poskytovat vnorenu kontajnerizaciu (ktora vyzaduje root opravnenia a moze sposobit unik z vnoreneho kontajneru do hostujuceho operacneho systemu a jeho kompromitaciu alebo DoS).

Narozdiel od kontajnerizacie, virtualizacia podporuje vnorenu kontajnerizaciu aj vnorenu virtualizaciu s velmi malou penalizaciou rychlosti (vdaka modernym procesorom a ich podporou pre "nested virtualization" a "second level address translation") a plne podporuje beh procesov s PID 0 a inych procecsov, ktore nemozno kontajnerizovat (napr. systemd).
Kontajnerizacia prinasa riziko ak kontajnerizovany proces z nejakeho dovodu potrebuje bezat pod uctom s PID 0 (root). Moznosti konfiguracie v takomto pripade su znacne obmedzene oproti virtualizacii.

Dalej v pripade kontajnerov je pristup k niektorym zdrojom hostovskeho operacneho systemu (niektore casti pamate, fyzicke zariadenia, graficke, sietove karty, modul TPM, USB zariadenia) je ovela komplikovanejsi a menej vykonny ako pri virtualizacii, kde moderne systemy (PC a servery) a zariadenia podporuju technologie pre priamy a zdielany pristup priamo k HW (SR-IOV, IOMMU, atd.)