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.
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
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"
Č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
- Docker overview(otevře se v novém okně)
- Dockerfile reference(otevře se v novém okně)
- Docker Compose(otevře se v novém okně)
- Containers(otevře se v novém okně)