Virtualizácia a Docker

Motivácia

  • Moderné aplikácie musia byť prenositeľné, škálovateľné a reprodukovateľné.
  • Rôzny hardvér, operačné systémy a prostredia komplikujú vývoj aj nasadenie.
  • Virtualizácia rieši rozdiely medzi prostrediami.

Modelový príklad

  • Vývojárka píše aplikáciu na svojom MacBooku.
  • Aplikácia beží na Linux serveri v klaude.
  • Bez virtualizácie by musela riešiť rozdiely mezi OS, knižnicami a hardvérom
  • S virtualizáciou môže vytvoriť konzistentné prostredie pre vývoj aj produkciu.

Čo je virtualizácia

Virtualizácia je vrstva medzi fyzickým hardvérom a aplikáciou, ktorá umožňuje oddeliť softvér od konkrétneho HW.

Umožňuje:

  • lepší manažment infraštruktúry,
  • jednoduchší vývoj,
  • jednoduchšie nasadenie aplikácií.

Virtualizácia

je vrstva oddeľujúca hosťovský (guest) operačný systém a fyzický hardvér.

+----------------+
| HOST HW and OS |
+----------------+
       ^
       |
+----------------+
| Virtualization |
+----------------+
       ^
       |
+------------------+
| GUEST OS and APP |
+------------------+

Ako spustiť virtualizáciu?

  • hypervisor
  • monitor virtuálnych strojov

Hypervisor

Hypervisor – virtualizačná vrstva je súčasťou hostiteľského OS.

   +----------+
   | HOST HW  |--------+
   +----------+        |
         ^             |
         |             |
  +------------+  +---------+
  | Hypervisor |  | Host OS |
  +------------+  +---------+
         ^
         |
+------------------+
| GUEST OS and APP |
+------------------+

napr. VMware ESX, Xen, QEMU/KVM, Proxmox

Monitor virtuálnych strojov

Monitor je aplikácia v hostiteľskom OS

  +------------+  +---------+
  | HOST OS    |- | Host HW |
  +------------+  +---------+
         ^
         |
+------------+
| VM Monitor |
+------------+
         ^
         |
+------------------+
| GUEST OS and APP |
+------------------+

napr. VirtualBox

Typy virtualizácie

Hardvérová virtualizácia (VM)

  • Každá aplikácia beží vo vlastnom operačnom systéme.
  • Silná izolácia, Vyššia režijná záťaž.

Paravirtualizácia

  • Beží priamo na fyzickom procesore.
  • Vyšší výkon, menšia flexibilita.

Virtualizácia na úrovni OS

  • Zdieľaný kernel host OS.
  • Izolované procesy.

Virtuálny stroj (VM)

Virtuálny stroj vytvára úplne oddelené prostredie:

  • vlastný OS,
  • vlastný kernel,
  • virtuálne CPU, RAM, disk, sieť.

Výhody

  • Silná izolácia, Možnosť spúšťať rôzne OS.

Nevýhody

  • Pomalý štart, Veľká spotreba zdrojov.

Prečo kontajnery

Virtuálne stroje sú:

  • ťažké,
  • pomalé na štart,
  • náročné na správu.

Kontajnery vznikli ako ľahšia alternatíva k VM.

Kontajnery

  • Kontajner obsahuje aplikáciu a jej závislosti.
  • Využíva kernel hostiteľského OS, ale jeho procesy sú izolované

Manažér kontajnerov

Vrstva hostiteľského OS, ktorá vytvára "klietku", v ktorej beží jeden alebo viac procesov.

  • Aplikácia v kontajneri využíva iba jadro hostiteľského OS.
  • Všetko ostatné je virtualizované tenkou vrstvou.

Manažér kontajnerov

  +------------+  +---------+
  | HOST OS    |- | Host HW |
  +------------+  +---------+
       ^
       |
+---------------------+
|  Container Manager  |
+---------------------+
       ^
       |
    +-----+
    | APP |
    +-----+

Stav kontajnera

Kontajner je bezstavový.

Stav aplikácie (dáta) musí byť uložený mimo kontajnera:

  • virtuálne blokové zariadenie,
  • zdieľaná zložka (volume)
  • databáza alebo object storage.

Docker

Docker je platforma pre:

  • tvorbu kontajnerov,
  • distribúciu aplikácií,
  • spúšťanie kontajnerov.

Využíva virtualizáciu na úrovni OS

Docker architektúra

  +----------+
  | registry |   Docker Hub
  +----------+
       ||         (image)
  +----------+
  |  daemon  |   Host machine
  +----------+
       ||         (protocol)
  +------------+
  | cli client |   Host or manager machine
  +------------+

Docker client

Príkaz docker v príkazovom riadku.

  • beží na ľubovoľnom OS.
  • pomocou vlastného protokolu komunikuje s docker démonom.
  • môžeme ním riadiť démona - kontrolovať a riadiť kontajnery.

Docker démon

  • (väčšinou) beží na Linux OS alebo na Docker Machine.
  • stará sa o bežiace kontajnery, podľa pokynov ich spúšťa alebo zastavuje.

Spustenie kontajnera

docker run nginx
  • stiahne image z registry,
  • vytvorí kontajner,
  • spustí aplikáciu.

Docker kontaner je bezstavový

Dáta musia byť oddelené od kontajnera pomocou:

  • Docker Volume
  • Databázy
  • sieťového súborového systému

Docker volumes

Príklad:

docker run -v /data:/app/data nginx
  • dáta prežijú reštart kontajnera,
  • oddelenie aplikácie a dát.

Sieť v Dockeri

Mapovanie portov:

docker run -p 8080:80 nginx
  • port 8080 na hostovi sa smeruje na port 80 v kontajneri.

Typy sietí:

  • bridge,
  • host,
  • none.

Obraz kontajnera

Je množina všetkých súborov potrebných na spoustenie kontajnera:

  • Operačný systém
  • Závislosti
  • Súbory aplikácie
  • Konfigurácia aplikácie

Obraz kontajnera sa nemení

Obraz kontajnera je šablóna pre tvorbu kontajnera

Obraz kontajnera vytvoríme dopredu

skladá sa z vrstiev:

  • vrstvy sú nemenné,
  • dajú sa zdieľať medzi obrazmi.

Virtualizácia vs Docker

VM Docker
vlastný OS zdieľaný kernel
pomalý štart rýchly štart
vysoká réžia nízka réžia

Kedy použiť Docker

  • lokálny vývoj,
  • CI/CD pipeline,
  • mikroservisy,
  • cloudové nasadenie.

Limity Dockeru

  • jeden hostiteľský uzol,
  • manuálne škálovanie,
  • chýba vysoká dostupnosť.

riešenie: Docker Compose, Kubernetes.

Zhrnutie

  • Virtualizácia rieši rozdiely medzi prostrediami.
  • Kontajnery sú ľahšia alternatíva k VM.
  • Docker je štandard pre kontajnerizáciu aplikácií.
  • Základ pre moderný klaud a DevOps.
Reload?