dokrTakéDocker Engine, Docker DesktopPokročilý

Definice

Docker je platforma pro vytváření, distribuci a spouštění aplikací v kontejnerech. Umožňuje zabalit program se závislostmi do přenositelného image, který lze spustit podobně na vývojářském počítači, v testech i na serveru. Pomáhá sjednotit prostředí, zrychlit nasazování a oddělit aplikace od hostitelského systému.

Kategorie: Cloud a DevOpsAktualizováno

Proč Docker řeší problém „u mě to běží“

Docker balí aplikaci společně s tím, co aplikace potřebuje ke spuštění: běhovým prostředím, knihovnami, systémovými nástroji a konfiguračními soubory. Výsledek se nazývá image. Z image se spouští kontejner, tedy běžící instance s vlastním procesovým prostorem a obvykle i vlastní sítí a souborovým systémem.

Hlavní přínos Dockeru není samotná izolace, ale opakovatelnost. Stejný image může vývojář pustit na notebooku, CI serveru i v cloudu. Tým tím omezuje rozdíly mezi prostředími, které jinak vznikají jinou verzí Node.js, chybějícím balíčkem nebo odlišnou konfigurací operačního systému.

Z čeho se Docker skládá

Dockerfile je textový recept na sestavení image. Instrukce v Dockerfile obvykle začínají výchozím obrazem, zkopírují zdrojové soubory, nainstalují závislosti a určí příkaz, který se má spustit po startu kontejneru.

Docker Engine sestavuje image a spouští kontejnery. Registry, například Docker Hub nebo interní firemní registry, slouží k ukládání a sdílení imagů. Docker Compose popisuje více kontejnerů najednou, typicky aplikaci, databázi a pomocné služby, aby šly spustit jedním příkazem.

Izolace bez celého virtuálního stroje

Kontejner není plnohodnotný virtuální stroj. Docker využívá vlastnosti jádra operačního systému, zejména izolaci procesů, sítí a přístupů ke zdrojům. Kontejner tedy sdílí jádro hostitele, ale vidí omezený a oddělený pohled na systém.

Praktický důsledek je rychlý start a menší režie než u klasické virtualizace. Praktické omezení je také jasné: kontejner není bezpečnostní hranice stejného typu jako samostatný stroj. Špatně nastavená oprávnění, běh pod rootem nebo mount citlivého adresáře mohou izolaci výrazně oslabit.

Dva příklady z praxe

Lokální API se stejným prostředím

Vývojář dostane projekt v Node.js a nemusí ručně instalovat přesnou verzi běhového prostředí. Dockerfile popíše build a spuštění služby. Nový člen týmu spustí stejný image a chyba způsobená rozdílnou lokální instalací se vůbec neobjeví.

FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
CMD ["npm", "start"]

Databáze pro integrační testy

Testovací sada potřebuje PostgreSQL, ale vývojář nechce instalovat databázi přímo do systému. Docker Compose spustí dočasnou databázi s předvídatelným portem a heslem. Po testech lze kontejner zahodit, aniž by zůstaly změny v lokálním prostředí.

services:
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: example
    ports:
      - "5432:5432"

Příklady z praxe

  1. Lokální API se stejným prostředím

    Vývojář dostane projekt v Node.js a nemusí ručně instalovat přesnou verzi běhového prostředí. Dockerfile popíše build a spuštění služby. Nový člen týmu spustí stejný image a chyba způsobená rozdílnou lokální instalací se vůbec neobjeví.

    FROM node:22-alpine
    WORKDIR /app
    COPY package*.json ./
    RUN npm ci
    COPY . .
    CMD ["npm", "start"]
  2. Databáze pro integrační testy

    Testovací sada potřebuje PostgreSQL, ale vývojář nechce instalovat databázi přímo do systému. Docker Compose spustí dočasnou databázi s předvídatelným portem a heslem. Po testech lze kontejner zahodit, aniž by zůstaly změny v lokálním prostředí.

    services:
      db:
        image: postgres:16
        environment:
          POSTGRES_PASSWORD: example
        ports:
          - "5432:5432"

Časté omyly

MýtusDocker je totéž co virtuální stroj.
Ve skutečnostiDocker kontejner obvykle sdílí jádro hostitelského systému a izoluje hlavně procesy, síť a souborový systém. Virtuální stroj emuluje nebo virtualizuje celý operační systém s vlastním jádrem, takže má jinou režii i jiný bezpečnostní model.
MýtusKdyž aplikace běží v Dockeru, poběží všude úplně stejně.
Ve skutečnostiDocker výrazně omezuje rozdíly prostředí, ale úplnou shodu nezaručuje. Rozdíly mohou vzniknout architekturou procesoru, konfigurací hostitele, sítí, volumes, limity zdrojů nebo závislostí na konkrétních službách mimo kontejner.
MýtusDo kontejneru se má ukládat produkční databáze jako do běžné složky.
Ve skutečnostiDocker kontejner je vhodné brát jako nahraditelný proces. Trvalá data patří do volume, spravovaného úložiště nebo externí databázové služby, jinak může odstranění kontejneru znamenat i ztrátu dat.

Časté dotazy

Kdy má smysl zavést Docker do projektu?
Docker se hodí, když tým potřebuje opakovatelné vývojové, testovací nebo provozní prostředí. Typické použití je lokální spuštění aplikace se závislostmi, automatizované testy v CI, balení mikroslužeb nebo příprava image pro cloudovou infrastrukturu. Docker nedává velký smysl u velmi jednoduchého skriptu bez závislostí nebo tam, kde organizace nechce spravovat kontejnery, registry a bezpečnostní aktualizace imagů.
Co je v Dockeru image a co kontejner?
Docker image je neměnný balíček se soubory, vrstvami a metadaty potřebnými ke spuštění aplikace. Docker kontejner je běžící instance tohoto image. Jeden image může mít mnoho současně spuštěných kontejnerů, podobně jako jeden instalační balík může sloužit k vytvoření více běžících instalací. Změny provedené uvnitř kontejneru se bez explicitního uložení nebo připojeného volume běžně neberou jako trvalá součást image.
K čemu slouží Docker Compose?
Docker Compose popisuje skupinu služeb v jednom YAML souboru, například webovou aplikaci, databázi a cache. Compose je vhodný hlavně pro lokální vývoj, demonstrační prostředí a jednodušší nasazení. Pro rozsáhlejší produkční orchestraci se často používá Kubernetes nebo spravovaná platforma, protože řeší plánování kontejnerů, škálování, obnovu po pádu, síťování a provozní politiku ve větším clusteru.
Je Docker kontejner automaticky bezpečný?
Docker zvyšuje izolaci procesu a usnadňuje kontrolu závislostí, ale Docker sám neznamená bezpečné nasazení. Bezpečnost závisí na aktualizacích base image, právech procesu, správě tajných hodnot, nastavení sítě, omezení capabilities a kontrole imagů v registru. Kontejner spuštěný s příliš širokými oprávněními může poškodit hostitele nebo uniknout k datům, ke kterým neměl mít přístup.

Zdroje

  1. Docker overview(otevře se v novém okně)Docker
  2. Dockerfile reference(otevře se v novém okně)Docker
  3. Docker Compose(otevře se v novém okně)Docker
  4. Containers(otevře se v novém okně)Kubernetes

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.