Docker je počítačový program, který zajišťuje virtualizaci na úrovni operačního systému, tedy takzvanou kontejnerizaci. Byl poprvé vyreleasován v roce 2013 a vyvíjí ho společnost Docker, Inc.

Docker se používá k tomu, aby spouštěl softwarové balíčky označované jako kontejnery. Kontejnery jsou navzájem izolované a sdružují svoje vlastní nástroje, knihovny a konfigurační soubory. Dokáží spolu komunikovat skrze dobře definované kanály. Všechny kontejnery jsou spouštěny jedním jádrem operačního systému, což znamená, že jsou lehčí nežli virtuální stroje. Kontejnery jsou vytvářeny z imagů, které specifikují jejich přesný obsah. Image jsou často vytvářeny kombinací a modifikací standardních imagů stažených z veřejných repozitářů.

Historie

Docker začal vytvářet Solomon Hykes ve Francii jako interní projekt dotCloud, společnosti, která se profilovala ve službách platform-as-a-service. Software byl představen veřejnosti v Santa Clara na PyConu v roce 2013 a v březnu 2013 byl vyreleasován jako open source.

Technologie

Docker byl vyvinut primárně pro Linux, kde používá funkce na izolaci zdrojů Linuxového jádra operačního systému, jako jsou cgroups nebo namespaces. Zároveň využívá systémy na správu souborů a další systémy pro tvorbu nezávislých kontejnerů, které je možné spouštět v rámci jedné Linux instance, aniž by bylo potřeba používat virtuální zdroje. Podpora jádra Linuxu pro namespaces izoluje pohled aplikace na provozní prostředí, včetně stromů procesů, sítě, uživatelských údajů a systémů na správu souborů.

Výhody použití Dockeru

  • Plná kontrola nad produkčním prostředím aplikace. Docker dokáže zahrnout nutnou architekturu jako je JRE, aplikační server, VM argumenty a další proměnné prostředí, které aplikace potřebuje ke svému běhu. Infrastruktura může být snadno upravena a to nezávisle na vývojovém týmu, protože nepotřebují čekat na provozní tým, aby změnil prostředí.
  • Snížení rizika. Testy jsou spouštěny oproti stejnému image, který bude nakonec běžet na produkčním serveru. To zvyšuje spolehlivost testů. Navíc jsou releasy méně nebezpečné, protože pouze spouštějí stejný image na produkčním serveru, který byl spouštěn pro testy a další fáze vývoje, tedy například pre-produkční systémy, akceptační testy nebo kapacitní testy.
  • Méně náročná údržba. Tvorba prostředí je automatizovaná, čímž šetří čas provoznímu týmu a zároveň zvyšuje spolehlivost.
  • Jednoduchá tvorba více instancí. Docker umožňuje vytvořit novou instanci za pomoci pouhého spuštění image na serverech. Díky tomu je snadné přidávat další nody ke clusteru a horizontálně tak škálovat.
  • Jednoduchá aktualizace existujících aplikací a prostředí. Obvyklé postupy používající například instalační skripty jsou často rizikové při použití na existujícím prostředí. S použitím Dockeru je možné jednoduše vypnout kontejner a nastartovat aktualizovaný.

Nevýhody použití Dockeru

  • Zvýšená komplexita. Použití další vrstvy zvyšuje složitost, což může mít vliv na deployment, vývoj i build.
  • Náročná správa u většího množství kontejnerů. Spravovat větší množství kontejnerů je obtížné, zvláště pokud jsou klustrované. To se dá částečně kompenzovat použitím nástrojů jako je Google Kubernetes nebo Apache Mesos.
  • Sdílení zdrojů. Kontejnery sdílejí stejné jádro operačního systému a jsou tak méně izolované nežli skutečný virtuální stroj. Jedna chyba v jádře tak může ovlivnit každý z kontejnerů.
  • Nekompatibilita s jinými operačními systémy. Vzhledem k tomu, že je Docker postavený na Linux Containers, což je Linuxová technologie, není možné Docker přímo spouštět na jiných systémech a kontejner je vždy linuxový. Boot2Docker umožňuje použití pro Windows nebo Mac OS X za použití VirtualBox. Docker klient tak běží na hostitelském operačním systému a komunikuje s Docker deamonem uvnitř VirtualBoxu. Je to ale méně pohodlné řešení a jeho každodenní použití je tak poněkud nešikovné a mnohem komplikovanější nežli nativní použití Dockeru.
  • Obtížnost zavedení. Prvotní zavedení Dockeru může být náročné a zabrat hodně času. Je potřeba zhodnotit, jestli projekt za úsilí a zvýšení komplexnosti stojí.