Docker a Kubernetes¶
Kontajnerizácia aplikácií a ich orchestrácia ako základ moderného nasadzovania softvéru.
Čo je Docker?¶
Docker zabalí aplikáciu do kontajnera, ktorý obsahuje všetky potrebné knižnice, konfigurácie a runtime. Aplikácia potom funguje rovnako na každom serveri, bez ohľadu na to, kde je spustená.
- Rýchly štart
-
Kontajner nabehne v milisekundách až sekundách, pretože nezavádza celý operačný systém.
- Nízka spotreba
-
Zdieľa jadro hostiteľského systému, takže na jednom serveri zbehne veľa kontajnerov.
- Prenositeľnosť
-
Ten istý image beží na notebooku vývojára, v CI aj na produkčnom serveri.
- Izolácia
-
Aplikácie sa navzájom neovplyvňujú, konflikty knižníc odpadajú.
Na čo sa Docker používa¶
| Použitie | Príklad |
|---|---|
| Webové služby | Nginx, API backendy, mikroslužby |
| Databázy | PostgreSQL, MySQL, Redis v izolácii |
| Testovanie | Paralelný beh viacerých verzií aplikácie |
| CI/CD | GitLab CI, GitHub Actions, automatické buildy |
| Výučba | Jednotné prostredie pre celý ročník |
Nevýhody a limity¶
Kde Docker nie je vhodný
- Nižšia izolácia než plnohodnotný virtuálny stroj, keďže zdieľa jadro OS
- Nie je náhrada za desktopový systém ani za plnohodnotné OS
- Neposkytuje automatické škálovanie ani self-healing: to rieši až orchestrátor
- Kontajnery sú krátkodobé: dáta treba ukladať do volumes
Čo je Kubernetes?¶
Kubernetes (K8s) je orchestrátor kontajnerov. Kontajnery nevytvára, ale riadi ich životný cyklus, škálovanie, dostupnosť a komunikáciu.
Zjednodušene
Docker = balenie a spúšťanie aplikácií Kubernetes = správa stoviek až tisícov kontajnerov
Kubernetes rieši to, čo Docker sám nedokáže:
- automatické reštarty pri chybe
- škálovanie podľa záťaže
- rozdeľovanie požiadaviek medzi kontajnery
- self-healing: nahradenie spadnutého kontajnera
- roll-out a roll-back verzií
- správu konfigurácií a tajomstiev
- networking medzi službami v klastri
Porovnanie¶
| Oblasť | Docker | Kubernetes |
|---|---|---|
| Primárny účel | Kontajnerizácia aplikácie | Orchestrácia kontajnerov |
| Rozsah | Jednotlivé kontajnery | Tisíce kontajnerov naraz |
| Ovládanie | Manuálne / Compose | Automatické, deklaratívne |
| Zotavenie pri páde | Žiadne | Self-healing |
| Škálovanie | Základné | Automatické (HPA) |
| Aktualizácie | Manuálne | Rolling updates + rollback |
| Sieť | Jednoduchá | Rozsiahla virtuálna sieť |
| Vhodné pre | Vývoj, testovanie, menšie služby | Veľké systémy, produkcia |
Kedy použiť čo?¶
-
Použi Docker, ak...
- chcete rýchlo spustiť aplikáciu
- testujete vývoj alebo knižnice
- prevádzkujete menší projekt
- potrebujete izolovať prostredie
- stačí vám jeden server
-
Použi Kubernetes, ak...
- potrebujete škálovať aplikácie
- máte mikroslužby alebo veľké API
- potrebujete vysokú dostupnosť
- chcete automatizáciu a self-healing
- aplikácia musí bežať bez výpadkov
Ako spolu súvisia¶
graph LR
A[Dockerfile] --> B[Docker build]
B --> C[Image v Harbor]
C --> D[Kubernetes pull]
D --> E[Beziaci kontajner]
E --> F[Monitoring a self-healing]
F --> D
- Docker vytvorí image z Dockerfile
- Image sa nahrá do registry (TUKE Harbor)
- Kubernetes image stiahne
- Kubernetes spustí kontajnery podľa definície (Deployment, StatefulSet…)
- Kubernetes sleduje ich zdravie a pri páde ich nahradí
- Pri raste záťaže pridá ďalšie kópie