====== Docker: Kontejnerizace a izolace ====== **Docker** umožňuje spouštět aplikace v izolovaných prostředích zvaných kontejnery. Na rozdíl od virtuálních strojů jsou kontejnery extrémně lehké, rychle startují a sdílejí jádro operačního systému hostitele. ===== 1. Kontejner vs. Virtuální stroj (VM) ===== Hlavní rozdíl spočívá v tom, co všechno se izoluje: * **Virtuální stroj:** Obsahuje celý vlastní operační systém (Guest OS), což zabírá gigabyty místa a vyžaduje hodně RAM. Běží nad Hypervizorem. * **Docker kontejner:** Sdílí jádro ([[it:sw:linux_kernel|Kernel]]) hostitelského systému. Obsahuje pouze aplikaci a její knihovny. Díky tomu je kontejner o řád menší a startuje v řádu milisekund. --- ===== 2. Základní pojmy Dockeru ===== Abychom mohli s Dockerem pracovat, musíme pochopit jeho tři pilíře: * **Dockerfile:** Textový soubor s instrukcemi, jak má být aplikace sestavena (např. "použij Python 3.9", "zkopíruj kód", "nainstaluj knihovny"). * **Image (Obraz):** Neaktivní šablona vytvořená z Dockerfile. Je to "zmrazený" stav aplikace připravený ke spuštění. * **Container (Kontejner):** Běžící instance obrazu. Jeden obraz můžete spustit v deseti kontejnerech najednou, každý bude mít vlastní izolované prostředí. --- ===== 3. Jak Docker zajišťuje izolaci? ===== Docker využívá pokročilé funkce linuxového jádra, aby zajistil, že procesy v kontejneru nevidí ven a naopak: * **Namespaces:** Zajišťují, že kontejner má vlastní pohled na systém (vlastní procesy, síťové rozhraní, uživatele). * **Control Groups (cgroups):** Omezují zdroje. Můžete říct, že tento kontejner nesmí využít více než 512 MB RAM a 10 % CPU. * **Chroot / Union File System:** Kontejner vidí jen svůj vlastní souborový systém a nemá přístup k souborům hostitele (pokud mu to explicitně nepovolíte přes tzv. //Volumes//). --- ===== 4. Praktické výhody pro vývoj a provoz ===== * **Konzistence:** Vývojář, tester i produkční server spouštějí identický kontejner. * **Snadné škálování:** Potřebujete větší výkon? Jednoduše spustíte další instance kontejneru. * **Čistý systém:** Instalujete software do kontejneru, nikoliv přímo do operačního systému. Když aplikaci smažete, v systému nezůstane žádný "nepořádek". --- ===== 5. Docker Compose: Více kontejnerů najednou ===== Moderní aplikace se skládají z více částí (např. webový server + databáze + cache). **Docker Compose** umožňuje definovat celou tuto infrastrukturu v jednom YAML souboru a spustit ji jediným příkazem. # Příklad docker-compose.yml services: web: image: my-python-app ports: - "80:80" db: image: postgres:15 environment: POSTGRES_PASSWORD: secret ---- //Související články:// * [[it:sw:linux_kernel|Linux Kernel: Základ pro kontejnery]] * [[it:sw:microservices|Architektura mikroslužeb]] * [[it:sw:kubernetes|Kubernetes: Správa tisíců kontejnerů]] //Tagy: {{tag>it docker containers devops virtualization infrastructure}}//