Docker: kontejnery, ve kterých běží weby a aplikace
Docker je nástroj, který aplikaci zabalí i se vším, co ke svému běhu potřebuje, do takzvaného kontejneru. Kontejner se pak spustí stejně na notebooku vývojáře i na serveru a nepřekáží ostatním aplikacím vedle sebe. Majiteli webu to přináší hlavně klidnější aktualizace a snadné stěhování.
Aktualizováno
Obraz, kontejner a Dockerfile
Webová aplikace nestojí sama. Potřebuje určitou verzi programovacího jazyka, knihovny, nastavení a často i pomocné programy. Když se cokoli z toho na serveru liší od počítače vývojáře, objeví se slavné „u mě to fungovalo“. Docker to řeší třemi pojmy:
- Dockerfile – textový recept, jak prostředí pro aplikaci připravit.
- Obraz (image) – hotový balík vyrobený podle receptu. Nemění se a dá se uložit do registru, odkud si ho stáhne server.
- Kontejner – běžící instance obrazu. Z jednoho obrazu můžete spustit libovolný počet kontejnerů.
Recept pro jednoduchý statický web může vypadat takto:
# vezmi oficiální obraz webového serveru
FROM nginx:alpine
# nakopíruj do něj hotové stránky webu
COPY out/ /usr/share/nginx/html/
# kontejner poslouchá na portu 80
EXPOSE 80Docker je open source projekt (jak takové licence fungují, vysvětluje heslo open source) a kontejnery v jeho formátu dnes umí spouštět i řada dalších nástrojů.
Kontejner, nebo virtuální server
Obojí odděluje aplikace od sebe, ale na jiné úrovni. Virtuální server napodobuje celý počítač včetně vlastního operačního systému. Kontejner si jádro systému sdílí s hostitelem a odděluje jen to, co patří aplikaci.
| Virtuální server | Kontejner | |
|---|---|---|
| Operační systém | Vlastní, celý | Sdílí jádro hostitele |
| Spuštění | Desítky vteřin až minuty | Obvykle během vteřin |
| Velikost | Gigabajty | Často jen desítky až stovky megabajtů |
| Oddělení | Silnější, na úrovni hardwaru | Slabší, na úrovni procesů v systému |
| Typické použití | Pronajatý server, na kterém běží víc věcí | Jednotlivé aplikace a služby na serveru |
V praxi se nevylučují: kontejnery nejčastěji běží právě na virtuálním serveru. VPS je pozemek, kontejnery jsou domky, které na něm stojí vedle sebe.
Proč kontejnery usnadňují provoz
- Stejné prostředí všude. Co prošlo testem, poběží na serveru stejně, protože jde o tentýž obraz.
- Aktualizace výměnou. Nová verze webu je nový obraz. Starý kontejner se zastaví, nový naběhne – a když se něco nepovede, spustí se zase ten předchozí.
- Sousedé si nepřekážejí. Jeden web může potřebovat starší verzi jazyka a druhý novější. Každý má svou a aktualizace jednoho nerozbije druhý.
- Víc služeb jedním souborem. Nástroj Docker Compose popíše celou webovou aplikaci – například aplikaci, databázi a frontu úloh – a spustí ji jedním příkazem.
Co z toho má majitel webu
- Snadnější stěhování. Prostředí je popsané v souborech, ne v hlavě jednoho správce. Přesun k jinému poskytovateli je tak hlavně otázka přenesení obrazu a dat.
- Kratší výpadky při změnách. Výměna kontejneru trvá chvilku a návrat k předchozí verzi je rychlý.
- Méně překvapení. Když web roky běží v neměnném obrazu, nezmění se pod ním nic bez vědomí správce.
Na co si dát pozor
- Obraz stárne. Bezpečnostní opravy systému a knihoven se do běžícího kontejneru samy nedostanou. Obraz je potřeba pravidelně sestavit znovu z aktuálního základu.
- Data patří mimo kontejner. Nahrané soubory a databáze se ukládají do svazků a zálohují zvlášť – postup najdete v průvodci záloha webu.
- Hesla nepatří do obrazu. Klíče a přístupy se předávají při spuštění, aby neunikly s obrazem do registru.
- Cizím obrazům opatrně. Ve veřejných registrech je kdeco. Přednost mají oficiální a ověřené obrazy. Další zásady shrnuje průvodce zabezpečení webu.
Kontejnery u nás
Pro každý web v naší péči spouštíme samostatný kontejner a SSL certifikát k němu vzniká i obnovuje se automaticky. Vy nic z toho spravovat nemusíte: provoz, firemní e-mail a formuláře obstarává tarif Light – nejnižší částka je 1 000 Kč za měsíc a zrušit ho jde kdykoli. Aplikace s vlastní databází nebo zvláštními nároky na server naceníme předem podle rozsahu.
Časté otázky
Potřebuji Docker pro obyčejný firemní web?
Jako majitel webu ho sami používat nemusíte – je to nástroj pro toho, kdo web provozuje. Pro vás je důležité, jestli dodavatel umí web spolehlivě aktualizovat, zálohovat a v případě potřeby přestěhovat. Kontejnery jsou jeden ze způsobů, jak toho dosáhnout.
Je kontejner bezpečnější než běžný hosting?
Oddělení webů do kontejnerů snižuje riziko, že problém jednoho webu zasáhne ostatní. Samo o sobě ale web nezabezpečí – zastaralá aplikace uvnitř kontejneru je stejně zranitelná jako kdekoli jinde. Rozhoduje pravidelná aktualizace obrazů a rozumné nastavení.
Ztratím data, když se kontejner smaže?
Pokud jsou uložená jen uvnitř kontejneru, ano. Proto se data, která mají přežít, ukládají do svazků nebo do samostatné databáze mimo kontejner. A ty je potřeba zálohovat stejně jako u jakéhokoli jiného serveru.
Jaký je rozdíl mezi Dockerem a Kubernetes?
Docker kontejnery vytváří a spouští. Kubernetes je systém, který řídí velké množství kontejnerů na mnoha serverech – rozkládá zátěž, restartuje spadlé instance, přidává kapacitu. Pro malé weby a aplikace je Kubernetes obvykle zbytečně velký kanón.