Kontajner

27th Apr 2026

Úvod

Virtualizácia patrí medzi najdôležitejšie technologické koncepty súčasnej informatiky a tvorí základ fungovania moderných digitálnych služieb. V prostredí, kde sa neustále zvyšujú nároky na výkon, dostupnosť a flexibilitu systémov, umožňuje virtualizácia efektívne využívať fyzické zdroje a zároveň poskytovať používateľom izolované a bezpečné prostredia. Vďaka nej je možné prevádzkovať viacero nezávislých systémov na jednom fyzickom zariadení, čo výrazne znižuje náklady a zvyšuje efektivitu infraštruktúry.

V kontexte klaud computingu nadobúda virtualizácia ešte väčší význam, pretože umožňuje poskytovať infraštruktúru ako službu. Používatelia už nemusia vlastniť fyzické servery, ale môžu si ich prenajať vo forme virtuálnych zdrojov, ktoré sa dynamicky prispôsobujú ich potrebám. Táto kapitola podrobne vysvetľuje princípy virtualizácie, rozdiely medzi virtuálnymi strojmi a kontajnermi, ako aj praktické využitie nástroja Docker.


Význam virtualizácie pre klaud computing

Virtualizácia zohráva kľúčovú úlohu v klaud computingu, pretože umožňuje oddeliť fyzický hardvér od softvéru a vytvoriť tak flexibilnú vrstvu, ktorá sprostredkúva prístup k výpočtovým zdrojom. Tento proces sa označuje ako abstrakcia hardvéru, čo znamená, že fyzické komponenty ako procesor, pamäť alebo disk sa prezentujú používateľovi ako virtuálne zdroje. Používateľ tak nepracuje priamo s fyzickým zariadením, ale s jeho logickou reprezentáciou, ktorú môže jednoducho konfigurovať a spravovať.

Dôležitým konceptom je model IaaS, teda Infrastructure as a Service, ktorý predstavuje spôsob poskytovania infraštruktúry vo forme služby. Poskytovateľ klaudu spravuje fyzické servery a sieťovú infraštruktúru, zatiaľ čo používateľ si vytvára virtuálne servery podľa vlastných požiadaviek. Tento prístup umožňuje vysokú mieru flexibility, pretože používateľ môže meniť výkon, pamäť alebo úložisko bez potreby fyzického zásahu do hardvéru.

Virtualizácia zároveň umožňuje efektívne využitie zdrojov, pretože jeden fyzický server môže hostiť viacero virtuálnych prostredí. To znamená, že výkon servera nie je nevyužitý, ale je rozdelený medzi viacerých používateľov. Tento princíp je úzko spojený s pojmom multi-tenancy, ktorý označuje schopnosť systému obsluhovať viacerých zákazníkov súčasne bez toho, aby sa navzájom ovplyvňovali. Každý zákazník má pritom svoje vlastné izolované prostredie.

Fyzický server
      |
+----------------------+
| VM1 | VM2 | VM3 | VM4|
+----------------------+

Ďalším dôležitým pojmom je elasticita, ktorá označuje schopnosť systému dynamicky meniť svoje zdroje podľa aktuálnej záťaže. V praxi to znamená, že ak napríklad webová aplikácia zaznamená náhly nárast používateľov, systém automaticky pridá ďalšie virtuálne servery. Naopak, pri poklese záťaže sa zdroje uvoľnia. Tento mechanizmus je úzko spojený so škálovaním, ktoré môže byť horizontálne, teda pridávanie nových serverov, alebo vertikálne, teda zvyšovanie výkonu existujúceho servera.

Vysoká dostupnosť, označovaná ako high availability, predstavuje schopnosť systému fungovať bez prerušenia aj v prípade zlyhania niektorej časti infraštruktúry. V klaud prostredí sa to dosahuje napríklad presunutím virtuálneho stroja na iný fyzický server, ak dôjde k výpadku. Používateľ tak často ani nezaznamená, že došlo k technickému problému.


Čo je virtualizácia

Virtualizácia je technológia, ktorá umožňuje vytvárať virtuálne verzie fyzických zariadení alebo systémov. Základným princípom je abstrakcia, teda oddelenie logickej vrstvy od fyzickej. To znamená, že aplikácie nekomunikujú priamo s hardvérom, ale s jeho virtualizovanou reprezentáciou, ktorá sprostredkúva prístup k zdrojom.

Kľúčovým komponentom virtualizácie je hypervízor, čo je softvér alebo vrstva, ktorá riadi vytváranie a správu virtuálnych strojov. Hypervízor prideľuje jednotlivým virtuálnym prostrediam procesorový čas, pamäť a ďalšie zdroje, pričom zabezpečuje ich izoláciu. Existujú dva základné typy hypervízorov. Prvý typ, označovaný ako bare-metal alebo Type 1, beží priamo na hardvéri a poskytuje vysoký výkon, pretože nevyužíva sprostredkujúcu vrstvu operačného systému. Druhý typ, označovaný ako Type 2, beží nad existujúcim operačným systémom, čo síce zjednodušuje použitie, ale znižuje výkon.

Aplikácie
   |
Virtuálne stroje
   |
Hypervízor
   |
Hardvér

Virtualizácia môže mať rôzne formy. Plná virtualizácia znamená, že sa simuluje kompletný hardvér, takže operačný systém nemusí byť upravený. Paravirtualizácia predstavuje optimalizovaný prístup, kde operačný systém vie, že beží vo virtualizovanom prostredí, a komunikuje efektívnejšie s hypervízorom. OS-level virtualizácia, ktorá je základom kontajnerov, umožňuje spúšťať viacero izolovaných prostredí na jednom jadre operačného systému.


Virtuálne stroje

Virtuálne stroje predstavujú základnú jednotku virtualizácie a fungujú ako plnohodnotné počítače v rámci jedného fyzického zariadenia. Každý virtuálny stroj obsahuje vlastný operačný systém, čo znamená, že je úplne nezávislý od ostatných. Tento prístup poskytuje vysokú mieru izolácie, pretože problémy v jednom virtuálnom stroji neovplyvňujú ostatné.

Základným pojmom je obraz virtuálneho stroja, ktorý predstavuje súbor obsahujúci celý operačný systém a konfiguráciu. Pri spustení sa z tohto obrazu vytvorí bežiaca inštancia. Nevýhodou tohto prístupu je vyššia náročnosť na zdroje, pretože každý virtuálny stroj obsahuje kompletný operačný systém, čo zvyšuje spotrebu pamäte aj procesorového výkonu.

[VM1: OS + App]
[VM2: OS + App]
[VM3: OS + App]
        |
     Hypervízor
        |
      Hardvér

Praktickým príkladom môže byť firma, ktorá prevádzkuje databázu na jednom virtuálnom stroji, webový server na druhom a testovacie prostredie na treťom. Každý z nich môže mať iný operačný systém a konfiguráciu, pričom všetky bežia na jednom fyzickom serveri.


Kontajnery a kontajnerizácia

Kontajnery predstavujú moderný prístup k virtualizácii, ktorý funguje na úrovni operačného systému. Na rozdiel od virtuálnych strojov neobsahujú vlastný operačný systém, ale zdieľajú kernel hostiteľského systému. Kernel je jadro operačného systému, ktoré zabezpečuje komunikáciu medzi hardvérom a softvérom, a jeho zdieľanie výrazne znižuje nároky na zdroje.

Izolácia kontajnerov je zabezpečená pomocou mechanizmov ako namespaces a cgroups. Namespaces zabezpečujú, že každý kontajner vidí len svoje vlastné procesy, súbory a sieťové rozhrania. Cgroups, teda control groups, riadia využívanie zdrojov, ako je CPU alebo pamäť, čím zabraňujú tomu, aby jeden kontajner spotreboval všetky dostupné zdroje.

[App1] [App2] [App3]
    \    |    /
     Host OS (kernel)

Kontajnery majú rýchly štart a nízku režijnú záťaž, čo znamená, že sa spúšťajú v priebehu sekúnd a umožňujú vysokú hustotu nasadenia aplikácií.


Virtuálne stroje vs kontajnery

Rozdiel medzi virtuálnymi strojmi a kontajnermi spočíva najmä v úrovni izolácie a náročnosti na zdroje. Virtuálne stroje obsahujú celý operačný systém, čo zabezpečuje silnú izoláciu, ale zároveň zvyšuje spotrebu zdrojov a čas spustenia. Kontajnery naopak zdieľajú kernel, čo ich robí ľahšími a rýchlejšími, no izolácia je mierne slabšia.

Virtuálne stroje:
[OS + App] [OS + App]

Kontajnery:
[App] [App] [App]
   Host OS

V praxi sa virtuálne stroje používajú tam, kde je potrebná vysoká bezpečnosť alebo rôzne operačné systémy, zatiaľ čo kontajnery sú ideálne pre moderné aplikácie, ktoré vyžadujú rýchle nasadenie a škálovanie.


Docker ako nástroj kontajnerizácie

Docker je platforma, ktorá umožňuje vytvárať, distribuovať a spúšťať kontajnery. Jeho hlavnou výhodou je prenositeľnosť, čo znamená, že aplikácia zabalená v kontajneri funguje rovnako na rôznych systémoch. Tento princíp rieši problém rozdielov medzi vývojovým a produkčným prostredím.

Architektúra Dockeru pozostáva z viacerých komponentov. Docker klient je nástroj, pomocou ktorého používateľ zadáva príkazy. Docker démon je proces, ktorý tieto príkazy vykonáva a spravuje kontajnery. Registry je úložisko obrazov, odkiaľ sa kontajnery sťahujú alebo kam sa ukladajú.

Používateľ
   |
Docker CLI
   |
Docker Daemon
   |
Kontajnery / Obrazy
   |
Registry

Siete v Dockeri

Sieťovanie v Dockeri predstavuje mechanizmus, ktorý umožňuje kontajnerom komunikovať medzi sebou navzájom, ako aj s externým svetom. Keďže kontajnery sú izolované procesy bežiace na jednom hostiteľskom systéme, je potrebné zabezpečiť riadený spôsob, ako si vymieňajú dáta. Docker preto vytvára virtuálnu sieťovú vrstvu, ktorá funguje podobne ako klasická počítačová sieť, no je plne softvérovo definovaná.

Základným pojmom je sieťový namespace, čo je mechanizmus operačného systému, ktorý zabezpečuje izoláciu sieťového prostredia. Každý kontajner má vlastný namespace, čo znamená, že má svoju vlastnú IP adresu, sieťové rozhrania a routovaciu tabuľku. Kontajner tak „vidí“ iba svoju vlastnú sieť, pokiaľ nie je explicitne prepojený s inými kontajnermi. Tento princíp izolácie je kľúčový pre bezpečnosť aj správne fungovanie aplikácií.

Ďalším dôležitým pojmom je virtuálne sieťové rozhranie, ktoré funguje ako spojenie medzi kontajnerom a Docker sieťou. Docker pri vytvorení kontajnera automaticky pripojí toto rozhranie do virtuálnej siete, čím umožní komunikáciu. Tento proces je transparentný pre používateľa, no v pozadí ide o komplexnú konfiguráciu sieťových pravidiel.

[Container A] ---\
                  \ 
                   [Docker Bridge Network] --- [Host Network Interface] --- Internet
                  /
[Container B] ---/

Najčastejšie používaným typom siete je bridge sieť, ktorá predstavuje virtuálnu sieť vytvorenú na jednom hostiteľskom systéme. V tejto sieti môžu kontajnery komunikovať medzi sebou pomocou IP adries alebo názvov kontajnerov. Docker obsahuje vlastný DNS mechanizmus, ktorý automaticky prekladá názvy kontajnerov na ich IP adresy, čo výrazne zjednodušuje konfiguráciu aplikácií. Používateľ tak nemusí manuálne nastavovať IP adresy, ale môže používať logické názvy služieb.

Ďalším typom je host sieť, ktorá predstavuje špecifický režim, v ktorom kontajner nepoužíva izolovanú sieť, ale zdieľa sieť hostiteľského systému. To znamená, že kontajner nemá vlastnú IP adresu, ale používa rovnakú sieťovú konfiguráciu ako hostiteľ. Výhodou tohto prístupu je vyšší výkon, pretože sa eliminuje sieťová virtualizácia, no nevýhodou je nižšia izolácia.

[Container] ---> používa priamo ---> [Host Network]

V distribuovaných systémoch sa využíva overlay sieť, ktorá umožňuje komunikáciu medzi kontajnermi bežiacimi na rôznych fyzických serveroch. Tento typ siete je dôležitý najmä v klaud prostredí, kde aplikácie často bežia na viacerých uzloch. Overlay sieť vytvára logickú sieť nad fyzickou infraštruktúrou, čím zabezpečuje, že kontajnery sa môžu správať, akoby boli v jednej lokálnej sieti.

Špeciálnym prípadom je none sieť, ktorá úplne vypína sieťovú komunikáciu kontajnera. Kontajner v tomto režime nemá prístup ani k iným kontajnerom, ani k internetu. Tento režim sa používa v situáciách, kde je potrebná maximálna izolácia, napríklad pri spracovaní citlivých dát.

Dôležitým konceptom v Docker sieťach je mapovanie portov, ktoré umožňuje sprístupniť službu bežiacu v kontajneri smerom von. Každý kontajner môže mať interný port, na ktorom beží aplikácia, no tento port nie je automaticky dostupný mimo Docker siete. Pomocou mapovania portov sa tento interný port prepojí s portom na hostiteľskom systéme.

[Container: port 80] ---> [Host: port 8080] ---> používateľ (browser)

V praxi to znamená, že webová aplikácia bežiaca na porte 80 v kontajneri môže byť dostupná na porte 8080 na hostiteľskom počítači. Používateľ tak pristupuje k aplikácii cez hostiteľský systém, ktorý požiadavku presmeruje do kontajnera.

Komunikácia medzi kontajnermi je najjednoduchšia v prípade, že sa nachádzajú v rovnakej sieti. V takom prípade môžu používať názvy kontajnerov ako adresy, čo je umožnené vstavaným DNS serverom Dockeru. Tento prístup je často využívaný pri architektúre mikroservisov, kde jednotlivé služby komunikujú medzi sebou cez sieť.

Sieťovanie v Dockeri je teda komplexný, no veľmi flexibilný systém, ktorý umožňuje vytvárať izolované aj prepojené prostredia podľa potrieb aplikácie. Správne nastavenie siete je kľúčové pre bezpečnosť, výkon aj spoľahlivosť kontajnerizovaných aplikácií v klaud prostredí.

Ukladanie dát

V klaud prostredí je správne ukladanie dát ešte dôležitejšie, pretože aplikácie sú často dynamicky presúvané medzi servermi. Zväzky umožňujú oddeliť dáta od výpočtovej časti aplikácie, čo znamená, že kontajner môže byť presunutý alebo nahradený bez straty dát. Tento prístup podporuje škálovanie, vysokú dostupnosť a odolnosť systému voči zlyhaniam.

Ukladanie dát v Dockeri je riešené pomocou externých mechanizmov, pretože samotné kontajnery sú bezstavové. Zväzky predstavujú najdôležitejší nástroj na zabezpečenie perzistencie dát, pričom poskytujú spoľahlivé a prenositeľné riešenie. Bind mounty umožňujú jednoduché prepojenie s hostiteľským systémom a tmpfs poskytuje rýchle, no dočasné úložisko. Správne nastavenie ukladania dát je kľúčové pre stabilitu, bezpečnosť a škálovateľnosť aplikácií v klaud prostredí.

Ukladanie dát v Dockeri predstavuje zásadnú tému, pretože kontajnery sú navrhnuté ako bezstavové jednotky. Bezstavovosť znamená, že kontajner pri svojom behu neuchováva trvalý stav, a ak je zastavený alebo odstránený, všetky dáta uložené v jeho vnútri sa strácajú. Tento princíp je výhodný pre škálovanie a jednoduché nasadzovanie aplikácií, no zároveň vytvára potrebu riešiť perzistentné ukladanie dát mimo samotného kontajnera.

Základným pojmom je perzistencia dát, čo označuje schopnosť uchovávať dáta nezávisle od životného cyklu kontajnera. To znamená, že aj keď sa kontajner reštartuje alebo odstráni, dáta zostávajú zachované. Docker tento problém rieši pomocou mechanizmov, ktoré umožňujú prepojiť kontajner s externým úložiskom.

Prečo kontajnery neukladajú dáta trvalo

Predstavme si databázový kontajner, ktorý ukladá dáta o používateľoch. Ak by tieto dáta boli uložené priamo v kontajneri, pri jeho odstránení by sa stratili. Preto sa použije zväzok, ktorý uchováva databázové súbory mimo kontajnera. Pri reštarte alebo opätovnom vytvorení kontajnera sa zväzok znovu pripojí a dáta zostanú zachované.

Kontajnery sú navrhnuté ako bezstavové, čo znamená, že ich dáta sa pri reštarte strácajú. Preto sa používa persistencia dát, teda ukladanie mimo kontajnera. Volume je špeciálny mechanizmus, ktorý umožňuje uchovávať dáta nezávisle od životného cyklu kontajnera.

[Container] ---> [Volume] ---> dáta pretrvávajú

Pri spustení kontajnera sa vytvorí špeciálna zapisovateľná vrstva nad nemenným obrazom. Táto vrstva slúži na ukladanie všetkých zmien, ktoré vzniknú počas behu aplikácie. Keď je však kontajner odstránený, táto vrstva zaniká spolu s ním. To znamená, že ak by napríklad databáza ukladala svoje dáta priamo do tejto vrstvy, po odstránení kontajnera by došlo k ich nenávratnej strate.

[Image (read-only)]
        +
[Container layer (write)]
        =
[Bežiaci kontajner]

Z tohto dôvodu je nevyhnutné ukladať dôležité dáta mimo kontajnera, teda do externého úložiska, ktoré nie je viazané na jeho existenciu.


Zväzky (volumes) ako riešenie perzistencie

Najdôležitejším mechanizmom na ukladanie dát v Dockeri sú zväzky, často označované anglickým termínom volumes. Zväzok je špeciálne úložisko spravované Dockerom, ktoré existuje nezávisle od kontajnerov. To znamená, že dáta uložené v zväzku pretrvávajú aj po odstránení kontajnera a môžu byť zdieľané medzi viacerými kontajnermi.

Zväzky sú fyzicky uložené na hostiteľskom systéme, no Docker sa stará o ich správu, čo zahŕňa ich vytváranie, pripojenie ku kontajnerom a mazanie. Používateľ tak nemusí riešiť presnú cestu v súborovom systéme, ale pracuje s logickými názvami zväzkov.

[Container] ---> [Volume] ---> uložené dáta na hostiteľovi

Zväzky sú vhodné najmä pre produkčné prostredia, pretože poskytujú spoľahlivý a bezpečný spôsob ukladania dát, napríklad pre databázy alebo súborové úložiská.


Bind mount ako priame prepojenie

Ďalším spôsobom ukladania dát je bind mount, ktorý predstavuje priame prepojenie adresára z hostiteľského systému s adresárom v kontajneri. Na rozdiel od zväzkov Docker nespravuje tieto dáta, ale používa existujúcu cestu v súborovom systéme.

Tento prístup je veľmi užitočný pri vývoji aplikácií, pretože umožňuje okamžité zobrazenie zmien. Ak vývojár upraví súbor na hostiteľskom systéme, zmena sa okamžite prejaví aj v kontajneri bez potreby jeho reštartu.

[Host directory] <--- prepojenie ---> [Container directory]

Nevýhodou bind mountov je, že sú menej prenositeľné a viac závislé od konkrétneho prostredia, pretože vyžadujú existenciu konkrétnej cesty na hostiteľskom systéme.


tmpfs ako dočasné úložisko v pamäti

Špeciálnym typom úložiska je tmpfs, ktorý ukladá dáta priamo do operačnej pamäte. Tento prístup je extrémne rýchly, pretože nevyužíva diskové operácie, no zároveň je dočasný. Dáta uložené v tmpfs sa strácajú pri zastavení kontajnera.

Tmpfs sa používa najmä v situáciách, kde je potrebná vysoká rýchlosť a zároveň nie je potrebné dáta uchovávať dlhodobo, napríklad pri spracovaní dočasných súborov alebo citlivých informácií, ktoré by nemali byť uložené na disku.

[Container] ---> [RAM (tmpfs)] ---> rýchle, ale dočasné dáta

Zdieľanie dát medzi kontajnermi

Jednou z výhod zväzkov je možnosť zdieľania dát medzi viacerými kontajnermi. To znamená, že viacero kontajnerov môže pristupovať k rovnakému úložisku, čo je užitočné napríklad pri architektúre mikroservisov, kde rôzne služby pracujú s rovnakými dátami.

[Container A] \
               ---> [Volume] ---> spoločné dáta
[Container B] /

Tento prístup umožňuje oddeliť logiku aplikácie od ukladania dát, čo zjednodušuje správu aj škálovanie systému.

Zhrnutie

Bezpečnosť kontajnerov je dôležitá, pretože zdieľajú kernel hostiteľského systému. Používanie dôveryhodných obrazov znamená, že vývojár by mal vyberať len overené zdroje, aby minimalizoval riziko zraniteľností. Spúšťanie kontajnerov ako non-root používateľ znižuje riziko, že kompromitovaný kontajner získa plný prístup k systému.

Pokročilé mechanizmy ako seccomp alebo AppArmor umožňujú obmedziť správanie kontajnera na úrovni operačného systému. Tieto nástroje definujú, aké operácie môže kontajner vykonávať, čím výrazne zvyšujú bezpečnosť celého systému.

Virtualizácia je základom klaud computingu a umožňuje efektívne využitie zdrojov, flexibilitu a vysokú dostupnosť. Virtuálne stroje poskytujú silnú izoláciu, zatiaľ čo kontajnery prinášajú rýchlosť a efektivitu. Docker predstavuje praktický nástroj, ktorý umožňuje tieto koncepty jednoducho implementovať v praxi a výrazne zjednodušuje vývoj aj nasadzovanie moderných aplikácií.

Previous Post Next Post

Kontajner