Docker je sada produktů a nástrojů typu platforma-jako-služba (PaaS), které využívají virtualizaci na úrovni operačního systému na dodávání softwaru v balících nazývaných kontejnery.
Jde o software s otevřeným zdrojovým kódem. Některé části jsou nabízené jako komerční služba. Mezi jeho hlavní výhody patří, že není důležité na jakém operačním systému a s jakými nástroji aplikaci vyvíjíte. Docker pomocí izolovaných kontejnerů zabezpečuje jednotné vývojové prostředí pro Windows, MacOS i Linux.
Příklad: Vyvíjíme aplikaci v jazyku PHP pod operačním systémem Ubuntu 20.04, na kterém běží LEMP. Jeden z vývojářů ale používá Windows, jiný zase MacOS. Nemusí si však instalovat ani virtualizovat kompletní operační systém Ubuntu 20.04 a nastavovat LEMP, protože Docker má předpřipravený obraz (image) přesně pro potřeby zmíněné aplikace.
Docker výrazně ulehčuje a automatizuje vývoj softwaru, jeho distribuci a provoz.
Za hlavním vývojem stojí společnost Docker Inc., kterou založili Solomon Hykes a Sebastien Pahl během Y Combinator Summer 2010, což je startup inkubátor a spustili ji v roce 2011. Hykes začal Docker projekt ve Francii jako interní projekt pro dotCloud, což byla platform-as-a-service společnost.
Docker byl veřejnosti představený v Santa Clara na konferenci PyCon v roku 2013. Jako open-source bol uvolněný v březnu 2013. V tom čase používal LXC, ale později přešel ve verzi 0.9 na vlastní běhové prostředí napsané v jazyku Go (Golang). V roce 2017 Docker vytvořil projekt Moby, který slouží na výzkum a testování nových funkcí, zároveň jde o upstream pro Docker.
Základní pojmy
Koncept projektu Docker je postavený na několika pilířích, které si zde krátce představíme a podrobněji prozkoumáme v dalších částech tohoto seriálu.
Obraz (Image)
Jde o šablonu, která je určená pouze pro čtení a je uložená v registru jako například hub.docker.com
. Podle této šablony Docker vytvoří kontejner
nebo vícero kontejnerů. Bližší specifikace, podle které má Docker z obrazu vytvořit kontejner, se zapisuje do textového souboru s názvem Dockerfile
.
Dockerfile
Jde o textový soubor s názvem Dockerfile
, do kterého píšeme návod a příkazy potřebné na vytvoření kontejneru. Takto například necháme vytvořit kontejner, který z registru hub.docker.com
stáhne a spustí operační systém Ubuntu v nejnovější verzi (první řádek) a následně v něm aktualizuje všechen software a nainstaluje nástroje potřebné na sestavování ostatních nástrojů (druhý řádek):
FROM ubuntu:latest
RUN apt-get -y update && apt-get -y upgrade && apt-get install -y build-essential
Ve složce, kde se nachází textový soubor Dockerfile
, teď v terminálu spustíme kontejner z obrazu (image) ubuntu.latest:
docker run -i -t ubuntu /bin/bash
Takto spuštěný kontejner s názvem ubuntu
v terminálu zobrazí bash
a můžeme začít psát příkazy do právě načítaného operačního systému Ubuntu.
Kontejner (Container)
Jde o spuštěný obraz (image) – například ten, který jsme výše spustili příkazem docker run -i -t ubuntu /bin/bash
. Kontejnery jsou úplně nebo částečně izolované od hostitelského operačního systému a můžeme je vytvořit, spustit, zastavit, přesunout nebo smazat.
Obsah (Volume)
Kontejnery jsou svým konceptem bezstavové a neperzistetní. To znamená, že o jejich data přicházíme po jejich zrušení. V reálném použití ale často potřebujeme s daty na úrovni adresářů a souborů pracovat. Obsah
(Volume) umožnuje data z hostitelského systému připojit ke kontejneru. Je to princip dost podobný mount
v Linuxových systémech.
Síť (Network)
Síť v docker kontejnerech slouží na jeho propojení s hostitelským systémem. Například potřebujeme komunikaci webového serveru Nginx otevřít na portu číslo 80 v kontejneru a propojit ji na port číslo 8080 na hostitelském počítači.
Docker umožňuje vytváření sítí mezi konkrétními kontejnery, což má výhodu u komplexnějších systémů.
Docker Compose
Jde o nástroj, díky kterému můžeme výrazně zjednodušit vytváření a nastavení komplexního prostředí z vícerých kontejnerů, sítí a dat. Nastavení pro nástroj Compose ukládáme do textového souboru s názvem docker-compose.yml
.
Docker Swarm
Nástroj, díky kterému můžeme spravovat vícero instalací projektu Docker (nody). Zabezpečuje orchestraci takového prostředí.
Kdy a proč Docker používat
Existuje několik vlastností projektu Docker, díky kterým je výhodné ho používat.
Reprodukovatelnost a práce v týmu
Na každém operačním systému, který má nainstalovaný Docker, je možné spustit obraz (image) a vytvořit tak kontejner se stejným prostředím. Windows, MacOS nebo Linux – není důležité, který operační systém používáme. Pokud tedy ve vývojářském týme členové používají různé operační systémy, nemusí si nainstalovat nebo plně virtualizovat jiný operační systém. Stačí nainstalovat Docker a spustit kontejner s požadovaným operačním systémem a nástroji.
Izolace a rychlost
Instalace a nastavení jakýchkoliv nástrojů v kontejneru nijak nevlivní hostitelský operační systém ani jiný kontejner. To znamená, že na jednom serveru můžeme mít spuštěný v jednom kontejneru webový server a v druhém databázový server, přičemž se nemusíme starat o případné závislosti a konflikty z nich vyplývající. Takto můžeme rychle nastavit vývojové prostředí s požadovanými nástroji a zkoušet různé alternativy bez ohrožení stability hostitelského operačního systému.
Bezpečnost
Izolace jednotlivých komponentů může přinést zvýšení bezpečnosti. Zároveň jde o způsob jak se izolovaně dají provozovat starší aplikace například už bez dostupné technické podpory.
Kdy Docker radši nepoužít
Každá technologie je dobrá v některých případech a v jiných zase může být výhodnější sáhnout po jiném řešení. Toto jsou případy, kdy se Docker nevyplatí využít.
Komplikovanost a rychlost
Pokud je aplikace příliš komplikovaná a potřebujeme, aby byla co nejrychlejší, Docker není dobrý nápad. Přidává totiž další vrstvy, které stojí mezi hostitelským operačním systémem a aplikací, což přirozeně celkovou rychlost aplikace zpomaluje. Jednoduše, pokud aplikace potřebuje více zdrojů a je náročné ji horizontálně škálovat.
Aplikace s grafickým uživatelským rozhraním (GUI)
Pokud vyvíjíme aplikaci, která se obsluhuje v grafickém prostředí myší (tedy ne výhradně přes příkazový řádek), Docker není vhodný nástroj. V takovém případě je lepší použít počítač s požadovaným operačním systémem nebo virtualizovat kompletní operační systém.
Instalujeme Docker
Ukážeme si instalaci projektu Docker na operačním systému Ubuntu 20.04. Instalace pro operační systémy Windows a MacOS probíhá v grafickém prostředí Docker Desktop, který nás provede celým procesem instalace. Příkazy projektu Docker však budou fungovat na každém operačním systému stejně.
V první řadě je potřeba zabezpečit aktuálnost všech balíků. Nainstalujeme tedy všechen updatovaný software pomocí dvou příkazů v jedné dávce:
sudo apt update && sudo apt upgrade
Pokud systém najde aktualizovatelné balíčky, takto se zeptá, jestli je chcete začít instalovat:
Do you want to continue? [Y/n]
Stlačíme klávesu y
když chceme začít aktualizační proces nebo kláves n
, pokud aktualizovat nechceme. Následně stlačíme klávesu Enter
.
Na instalaci projektu Docker použijeme oficiální skript, který instalaci v terminálu zjednoduší na 2 příkazy:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Odteď můžeme spouštět kontejnery a využívat všechny ostatní nástroje projektu Docker.
Pokud byste chtěli používat Docker jako uživatel bez root oprávnění, měli byste zvážit přidání svého uživatele do skupiny „docker“ například jako:
sudo usermod -aG docker uživatel
Shrnutí
Nadefinovali jsme si, co je Docker, kdy je vhodné použít ho a kdy radši ne. Nainstalovali jsme Docker a ukázali jsme si, jak v něm jednoduše a rychle spustit prostředí Linuxové distribuce Ubuntu.