====== Docker ====== **Docker** je open-source nástroj, který umožňuje spouštět aplikace v izolovaných prostředích zvaných **kontejnery**. Řeší klasický problém vývojářů: //"Na mém počítači to funguje, ale na serveru ne."// ===== Základní pojmy ===== Práce s Dockerem se točí kolem tří hlavních konceptů: * **Dockerfile:** Textový soubor obsahující instrukce pro sestavení obrazu (např. "použij Python 3.9", "zkopíruj kód", "nainstaluj knihovny"). * **Image (Obraz):** Nežijící šablona aplikace. Je to "zmrazený" stav aplikace se vším, co potřebuje ke spuštění. * **Container (Kontejner):** Běžící instance obrazu. Jeden obraz můžete spustit v mnoha kontejnerech současně. * **Docker Hub:** Veřejné úložiště, kde lze stahovat hotové obrazy (např. oficiální obraz pro databázi MySQL nebo webový server Nginx). ===== Jak Docker funguje? (Architektura) ===== Na rozdíl od virtuálních strojů (VM) Docker nesdílí celý operační systém. - **Virtuální stroj:** Obsahuje vlastní jádro OS, což je náročné na RAM a CPU. - **Docker kontejner:** Sdílí jádro hostitelského systému, ale izoluje procesy. Díky tomu je extrémně lehký a startuje v řádu sekund. ===== Výhody kontejnerizace ===== ^ Vlastnost ^ Výhoda pro vývojáře ^ | **Přenositelnost** | Kontejner běží stejně na notebooku, v cloudu i na [[Steam Deck|Steam Decku]]. | | **Izolace** | Můžete mít na jednom stroji dvě aplikace vyžadující různé verze stejné knihovny bez konfliktů. | | **Efektivita** | Vyšší hustota aplikací na jeden server oproti VM. | | **Verzování** | Obrazy lze verzovat a snadno se vrátit k předchozí funkční verzi aplikace. | ===== Základní workflow ===== 1. **Build:** Vytvoření obrazu z Dockerfile (docker build -t moje-aplikace .). 2. **Push:** Odeslání obrazu do registru (např. Docker Hub). 3. **Pull:** Stažení obrazu na cílový server (docker pull moje-aplikace). 4. **Run:** Spuštění kontejneru (docker run -d moje-aplikace). ===== Docker Compose ===== Pro složitější aplikace, které se skládají z více kontejnerů (např. web + databáze + cache), se používá nástroj **Docker Compose**. Pomocí jednoho souboru ``docker-compose.yml`` definujete celou infrastrukturu a spustíte ji jediným příkazem docker-compose up. --- > **Vztah k ostatním technologiím:** Zatímco Docker se stará o to, jak kontejner vytvořit a spustit, [[Kubernetes]] se stará o to, jak tyto kontejnery řídit na stovkách serverů zároveň. //Související: [[Kubernetes]], [[DevOps]], [[CI/CD]], [[https://www.docker.com|Oficiální web Docker]]//