Přeskočit na obsah
_CORE
AI & agentní systémy Podnikové informační systémy Cloud & Platform Engineering Datová platforma & integrace Bezpečnost & compliance QA, testování & observabilita IoT, automatizace & robotika Mobilní & digitální produkty Bankovnictví & finance Pojišťovnictví Veřejná správa Obrana & bezpečnost Zdravotnictví Energetika & utility Telco & média Průmysl & výroba Logistika & e-commerce Retail & věrnostní programy
Reference Technologie Blog Know-how Nástroje
O nás Spolupráce Kariéra
CS EN DE
Pojďme to probrat

Docker — kontejnerizace mění pravidla hry

15. 03. 2013 Aktualizováno: 24. 03. 2026 8 min čtení CORE SYSTEMSai
Tento článek byl publikován v roce 2013. Některé informace mohou být zastaralé.
Docker — kontejnerizace mění pravidla hry

Na konferenci PyCon v Santa Claře Solomon Hykes pred pár dny představil projekt Docker — nástroj pro balení aplikaci do lehkých kontejneru. To, co jsme viděli, má potenciál fundamentálně změnit zpusob, jakym vyvijiame, testujeme a nasazujeme software. Podívejme se, proc je Docker tak zajimovy a co to znamená pro enterprise vyvojare.

Co je Docker a proc vznikl

Docker je open-source platforma, která umožňuje zabalit aplikaci včetně všech jejich zavislosti do standardizovaneho kontejneru. Na rozdíl od virtuálních strojů, které emuluji kompletni hardware a běží vlastní jádro operačního systemu, kontejnery sdílejí jádro hostitelského systemu a izolují pouze userspace. Výsledkem je řádově mensi režie — kontejner startuje za sekundy, ne za minuty, a zabírá desítky megabajtů misto gigabajtů.

Projekt vznikl ve firmě dotCloud, která provozuje Platform-as-a-Service. Solomon Hykes a jeho tým zjistili, ze interni nástroj, který používají pro spravu aplikaci na své platformě, by mohl byt užitečný pro celou komunitu. A tak se Docker zrodil jako open-source projekt pod licenci Apache 2.0.

Technicky Docker stojí na dvou klíčových technologiích Linuxoveho jádra — cgroups (control groups) pro omezeni prostředků a namespaces pro izolaci procesu. Tyto mechanismy existují v Linuxu už roky, ale Docker je prvni nástroj, který je zpristupnil široké vývojářské komunitě prostřednictvím jednoduchého rozhrani.

Jak Docker funguje

Základním konceptem je Docker image — read-only šablona, která obsahuje operační system, runtime prostredi, knihovny a aplikaci. Image se vytváří pomoci souboru nazyvaneho Dockerfile, který popisuje kroky pro sestavení prostredi. Kazdy krok vytváří novou vrstvu (layer), což umožňuje efektivni sdileni a cachování.

FROM ubuntu:12.04 RUN apt-get update && apt-get install -y python python-pip COPY requirements.txt /app/ RUN pip install -r /app/requirements.txt COPY . /app/ CMD [“python”, “/app/server.py”]

Tento jednoduchý Dockerfile ukazuje silu konceptu — v šesti řádcích definujeme kompletni prostredi pro Python aplikaci. Kdokoliv s tímto souborem muze vybuildit identicky image na libovolném stroji s Dockerem.

Z image se vytváří kontejner — běžící instance image. Kontejner přidává zapisovatelnou vrstvu nad read-only vrstvy image. Zmeny v kontejneru (nove soubory, úpravy konfigurace) zůstávají v této vrchní vrstvě a nemění původní image. Tohle je naprosto klíčové pro reprodukovatelnost.

Docker vs. virtualizace — kde jsou rozdíly

V našem tymu pouzivame VMware pro produkci a VirtualBox pro vyvoj už leta. Prirodzene se tedy ptáme — proc bychom chtěli něco jiného? Rozdíly jsou zásadní a stojí za podrobné prozkoumani.

Vykon: Virtuální stroj běží nad hypervisorem a emuluje kompletni hardware. To znamená vlastní jádro, vlastní init system, vlastní spravu pameti. Kontejner sdílí jádro s hostem a izoluje pouze procesy. V praxi to znamená, ze na jednom serveru můžete mit desítky kontejneru tam, kde byste měli jednotky VM. Startup kontejneru je v radu sekund, startup VM v radu minut.

Izolace: Tady virtuální stroje stale vyhrávají. Plná hardwarova virtualizace poskytuje silnější izolaci — kompromitovaný VM nemůže snadno ovlivnit hostitele. Kontejnery sdílejí jádro, a pokud existuje zranitelnost v jádře, útočník muze teoreticky uniknout z kontejneru. Pro bezpečnostně kritické aplikace v bankovním sektoru to je relevantní uvaha.

Portabilita: Docker image běží stejne na vyvojarovem notebooku, na staging serveru i v produkci. Zadne „u me to funguje”. Image obsahuje vsechno — od systémových knihoven po konfiguraci aplikace. To je obrovská vyhoda proti VM, kde musíme udržovat konzistenci mezi prostředími pomoci nástrojů jako Puppet nebo Chef.

Union File System — klíčová inovace

Docker používá AUFS (Another Union File System) pro spravu vrstev image. Každá instrukce v Dockerfile vytváří novou vrstvu. Vrstvy jsou read-only a sdílejí se mezi imagy — pokud deset vašich aplikaci používá Ubuntu 12.04 jako základ, tato vrstva existuje na disku pouze jednou. To dramaticky snižuje diskové nároky a zrychluje stahování nových imagů.

Zapisovatelna vrstva kontejneru používá strategii copy-on-write. Kdyz kontejner modifikuje soubor z nižší vrstvy, soubor se nejdříve zkopíruje do vrchní vrstvy a teprve potom se upraví. To znamená, ze čtení je rychle (primo z nižší vrstvy), ale prvni zápis do existujícího souboru je pomalejší.

Docker Registry — sdileni imagů

Docker prinasi koncept registry — centrálního úložiště pro Docker image. Veřejný Docker Hub již obsahuje stovky imagů — od oficialnich distribuci (Ubuntu, CentOS, Debian) pres databaze (MySQL, PostgreSQL, MongoDB) az po aplikacni servery (Nginx, Apache, Tomcat). Můžete však provozovat i privátní registry pro interni použití, což je pro enterprise prostredi nezbytnost.

Workflow je jednoduchý: vývojáři buildí image lokálně, pushnou ho do registry, a deployment system ho pullne na produkcni servery. Vsichni pracují se stejným artefaktem — zadne „ale já měl jinou verzi knihovny”.

Prakticke použití — co jsme vyzkoušeli

V našem tymu jsme Docker vyzkoušeli na interním projektu — microservice pro zpracování faktur. Aplikace je napsaná v Javě 7, běží na Tomcatu 7 a připojuje se k PostgreSQL databazi. Tradičně bychom nasadili WAR soubor na sdileny Tomcat server a konfigurovli JNDI datasource. S Dockerem jsme pristoupili jinak.

Vytvořili jsme Dockerfile, který startuje od officialni OpenJDK image, přidává Tomcat, kopíruje WAR soubor a nastavuje environment variables pro pripojeni k databazi. Celý build trvá 45 sekund. Výsledný image má 340 MB — to zahrnuje operační system, JDK, Tomcat i nasi aplikaci.

Nasazeni na testovací server? Jeden příkaz: docker run -d -p 8080:8080 -e DB_HOST=postgres.internal nase-faktury:1.0. Za tri sekundy běží. Chceme novou verzi? Buildíme nový image, zastavíme starý kontejner, spustíme nový. Rollback? Spustíme předchozí verzi image. Jednoduchost je az podezřelá.

Limity a obavy

Docker je mladý projekt a má své limity, které je nutne pojmenovat. Za prvé, funguje pouze na Linuxu. Pro vyvojare na Mac OS X nebo Windows to znamená nutnost spouštět Docker uvnitř VM (pres Vagrant nebo boot2docker). To přidává vrstvu komplexity a částečně neguje výhodu jednoduchosti.

Za druhé, Docker zatím nepodporuje orchestraci vicero kontejneru. Pokud vaše aplikace sestava z webového serveru, aplikačního serveru, databaze a message brokeru, musíme ručně koordinovat spuštění a propojeni kontejneru. Pro jednoduché aplikace to není problem, ale pro enterprise systemy s desítkami komponent to je zásadní omezeni. Očekáváme, ze komunita brzy přinese nastroje pro orchestraci.

Za třetí, persistence dat. Kontejner je efemérní — po zastavení se ztratí vsechny zmeny v zapisovatelne vrstvě. Pro bezstavové aplikace to není problem, ale pro databaze a jiná stavova data musíme používat Docker volumes, které mapují adresář z hostitele do kontejneru. Sprava volumes je zatím poměrně primitivní.

Za čtvrté, monitoring a logovani. Tradiční nastroje jako Nagios nebo Zabbix počítají s tím, ze aplikace běží primo na serveru. Kontejnery přidávají vrstvu abstrakce, kterou tyto nastroje zatím neumí dobre zpracovat. Budeme potřebovat nove pristupy k monitorování.

Vliv na CI/CD pipeline

Kde vidíme největší potenciál Dockeru, je continuous integration a continuous delivery. Dnes nas CI server (Jenkins) buildí aplikaci, spouští testy a vytváří deployovatelný artefakt (WAR, JAR, RPM). S Dockerem se artefaktem stává samotný image — obsahuje nejen aplikaci, ale i celé prostredi.

To eliminuje celý třídu problemu. Už se nám nestane, ze test projde na CI serveru, ale selže v produkci kvůli rozdilne verzi systemove knihovny. Image, který prošel testy, je identicky s image, který poběží v produkci. Tuhle garanci nám žádný jiný nástroj neposkytuje.

Navíc Docker umožňuje paralelní testovani. Potřebujeme otestovat aplikaci proti PostgreSQL 9.1 a 9.3? Spustíme dva kontejnery s různými verzemi databaze a testy běží paralelně. Bez Dockeru bychom potřebovali dva separátní servery nebo slozitou konfiguraci na jednom.

Co to znamená pro enterprise

Je Docker připraven pro produkcni enterprise použití? Dnes v březnu 2013 upřímně — ještě ne. Projekt je ve velmi rané fazi, API se meni, dokumentace je strohá a komunita teprve vzniká. Ale směr je jasný a potenciál obrovský.

Pro naše klienty v bankovním a pojistovacim sektoru vidíme Docker jako budoucí standard pro nasazovani aplikaci. Představte si svět, kde každá aplikace běží ve svém izolovaném kontejneru s presne definovanými závislostmi. Kde deployment znamená jeden příkaz a rollback druhy. Kde vyvojove prostredi je identické s produkci. To je svět, který Docker slibuje.

Doporučujeme začít experimentovat nyní. Vyzkoušejte Docker na interních projektech, naučte se koncepty, pochopte limity. Az bude Docker připraven pro produkci — a jsme přesvědčeni, ze to bude během jednoho az dvou let — budete připraveni ho nasadit.

Srovnani s LXC

Linux Containers (LXC) existují déle nez Docker a poskytují podobnou funkcionalitu na nižší urovni. Docker původně pouzival LXC jako backend pro spravu kontejneru. Hlavní rozdíl je v urovni abstrakce — LXC poskytuje nizkouromnove API pro spravu kontejneru, zatímco Docker přidává koncepty jako image, Dockerfile, registry a verzovani. Je to rozdíl mezi assemblerem a vysokourovnovym jazykem.

Pro systemove administrátory zvyklé na praci s LXC muze Docker pusobit zbytecne abstraktne. Pro vyvojare, kteří chtějí proste zabalit a spustit svou aplikaci, je Docker vyrazne pristupnejsi. A prave přístupnost je to, co rozhodne o adopci technologie.

Budoucnost kontejnerizace

Docker není jediný hráč v prostoru kontejnerizace. Google intarne používá kontejnerovou technologii nazvanou Borg již více nez deset let a spouští v nich prakticky vsechny své sluzby. Fakt, ze Google spouští dva miliardy kontejneru tydne, dokazuje, ze kontejnerizace funguje v obrovský scale.

Očekáváme, ze Docker katalyzuje celý ekosystem — nastroje pro orchestraci, monitoring, networking a bezpecnost kontejneru. Je možné, ze za pet let bude deployment aplikace bez kontejneru pusobit stejne archaicky jako dnes deployment bez version control systemu.

Zaver a doporuceni

Docker je jednou z nejvýznamnějších technologii, které jsme v posledních letech viděli. Slibuje konec problemu „u me to funguje”, dramatické zrychlení deploymentu a lepsi vyuziti serverových prostředků. Projekt je mladý, ale směr je jasný.

Naše doporuceni: Zacnete experimentovat. Nainstalujte Docker, vytvořte Dockerfile pro jednu z vašich aplikaci, pochopte koncepty image a kontejneru. Az Docker dozraje pro produkci, budete připraveni.

dockerkontejnerydevopslinux
Sdílet:

CORE SYSTEMS

Stavíme core systémy a AI agenty, které drží provoz. 15 let zkušeností s enterprise IT.

Potřebujete pomoc s implementací?

Naši experti vám pomohou s návrhem, implementací i provozem. Od architektury po produkci.

Kontaktujte nás
Potřebujete pomoc s implementací? Domluvit schůzku