====== Container (Kontejnerizace) ====== **Kontejner** je lehká, samostatná a spustitelná balíková jednotka softwaru. Na rozdíl od tradiční virtualizace kontejnery nesimulují celý hardware, ale sdílejí jádro (kernel) hostitelského operačního systému. To z nich dělá extrémně efektivní nástroj pro moderní vývoj softwaru a architekturu mikroslužeb. ---- ====== Jak kontejner funguje? ====== Kontejnerizace využívá funkce Linuxového jádra (jako jsou **namespaces** a **cgroups**) k izolaci procesů. * **Namespaces:** Zajišťují, že kontejner vidí pouze své vlastní soubory, procesy a síťové rozhraní (izolace). * **Cgroups:** Omezují množství zdrojů ([[cpu|CPU]], [[ram|RAM]]), které může kontejner spotřebovat. ---- ====== Hlavní výhody kontejnerů ====== * **Přenositelnost:** "Jednou napiš, spusť kdekoliv." Kontejner eliminuje problém "u mě na počítači to fungovalo". * **Efektivita:** Kontejnery startují v řádu milisekund a spotřebovávají minimum systémových prostředků oproti virtuálním strojům. * **Izolace:** Pokud jeden kontejner spadne nebo je napaden, ostatní kontejnery na stejném serveru zůstávají v bezpečí a funkční. * **Škálovatelnost:** Je velmi snadné spustit deset nebo tisíc kopií stejného kontejneru podle aktuálního vytížení aplikace. ---- ====== Srovnání: Kontejnery vs. Virtuální stroje (VM) ====== ^ Vlastnost ^ Kontejnery ^ Virtuální stroje (VM) ^ | **Operační systém** | Sdílejí jádro hostitele. | Každý má vlastní plnohodnotný OS (Guest OS). | | **Velikost** | MB (velmi lehké). | GB (těžké). | | **Rychlost startu** | Sekundy / Milisekundy. | Minuty. | | **Izolace** | Na úrovni procesů (vysoká). | Na úrovni hardwaru (velmi vysoká). | ---- ====== Ekosystém a nástroje ====== ===== 1. Docker ===== Nejpopulárnější nástroj pro tvorbu a správu kontejnerů. Definice kontejneru se provádí pomocí textového souboru **Dockerfile**, ze kterého se sestaví "Image" (obraz). ===== 2. Kubernetes (K8s) ===== Nástroj pro tzv. **orchestraci**. Když máte tisíce kontejnerů, potřebujete systém, který je bude automaticky spouštět, restartovat při chybě a rozdělovat mezi ně zátěž. ---- ====== Praktické využití ====== * **Mikroslužby:** Rozdělení velké aplikace na mnoho malých kontejnerů (např. jeden pro přihlašování, druhý pro platby, třetí pro katalog). * **CI/CD:** Automatické testování a nasazování kódu. * **Cloud-native aplikace:** Aplikace navržené přímo pro běh v cloudech jako AWS, Azure nebo Google Cloud. ---- //Související pojmy: Docker, Kubernetes, Virtualizace, Cloud Computing, Mikroslužby, Linux Kernel.//