Docker je sada produktov a nástrojov typu platforma-ako-služba (PaaS), ktoré využívajú virtualizáciu na úrovni operačného systému na dodávanie softvéru v balíkoch nazývaných kontajnery.
Ide o softvér s otvoreným zdrojovým kódom. Niektoré časti sú ponúkané ako komerčná služba. Medzi jeho hlavné výhody patrí, že nie je dôležité na akom operačnom systéme a s akými nástrojmi aplikáciu vyvíjate. Docker pomocou izolovaných kontajnerov zabezpečuje jednotné vývojové prostredie pre Windows, MacOS aj Linux.
Príklad: Vyvíjame aplikáciu v jazyku PHP pod operačným systémom Ubuntu 20.04, na ktorom beží LEMP. Jeden z vývojárov ale používa Windows, iný zase MacOS. Nemusia si však inštalovať ani virtualizovať kompletný operačný systém Ubuntu 20.04 a nastavovať LEMP, pretože Docker má predpripravený obraz (image) presne pre potreby spomínanej aplikácie.
Docker výrazne uľahčuje a automatizuje vývoj softvéru, jeho distribúciu a prevádzku.
Za hlavným vývojom stojí spoločnosť Docker Inc. ktorú založili Solomon Hykes a Sebastien Pahl počas Y Combinator Summer 2010, čo je startup inkubátor a spustili ju v roku 2011. Hykes začal Docker projekt vo Francúzsku ako interný projekt pre dotCloud, čo bola platform-as-a-service spoločnosť.
Docker bol verjenosti predstavený v Santa Clara na konferencii PyCon v roku 2013. Ako open-source bol uvoľnený v marci 2013. V tom čase používal LXC, no neskôr prešiel vo verzii 0.9 na vlastné behové prostredie napísané v jazyku Go (Golang). V roku 2017 Docker vytvoril projekt Moby, ktorý slúži na výskum a testovanie nových funkcii, zároveň ide o upstream pre Docker.
Základné pojmy
Koncept projektu Docker je postavený na niekoľkých pilieroch, ktoré si tu krátko predstavíme a podrobnejšie preskúmame v ďalších častiach tohto seriálu.
Obraz (Image)
Ide o šablónu, ktorá je určená iba na čítanie a je uložená v registri ako napríklad hub.docker.com
. Podľa tejto šablóny Docker vytvorí kontajner
alebo viacero kontajnerov. Bližšia špecifikácia, podľa ktorej má Docker z obrazu vytvoriť kontajner, sa zapisuje do textového súboru s názvom Dockerfile
.
Dockerfile
Ide o textový súbor s názvom Dockerfile
, do ktorého píšeme návod a príkazy potrebné na vytvorenie kontajneru. Takto napríklad necháme vytvoriť kontajner, ktorý z registra hub.docker.com
stiahne a spustí operačný systém Ubuntu v najnovšej verzii (prvý riadok) a následne v ňom aktualizuje všetok softvér a nainštaluje nástroje potrebné na zostavovanie ostatných nástrojov (druhý riadok):
FROM ubuntu:latest
RUN apt-get -y update && apt-get -y upgrade && apt-get install -y build-essential
V priečinku, kde sa nachádza textový súbor Dockerfile
, teraz v termináli spustíme kontajner z obrazu (image) ubuntu.latest:
docker run -i -t ubuntu /bin/bash
Takto spustený kontajner s názvom ubuntu
v termináli zobrazí bash
a môžeme začať písať príkazy do práve načítaného operačného systém Ubuntu.
Kontajner (Container)
Ide o spustený obraz (image) – napríklad ten, ktorý sme vyššie spustili príkazom docker run -i -t ubuntu /bin/bash
. Kontajnery sú úplne alebo čiastočne izolované od hostiteľského operačného systému a môžeme ich vytvoriť, spustiť, zastaviť, presunúť alebo zmazať.
Obsah (Volume)
Kontajnery sú svojim konceptom bezstavové a neperzistetné. To znamená, že o ich dáta prichádzame po ich zrušení. V reálnom použití ale často potrebujeme s dátami na úrovni adresárov a súborov pracovať. Obsah
(Volume) umožnuje dáta z hostiteľského systému pripojiť ku kontajneru. Je to princíp dosť podobný mount
v Linuxových systémoch.
Sieť (Network)
Sieť v docker kontajneroch slúži na jeho prepojenie s hostiteľským systémom. Napríklad potrebujeme komunikáciu webového servera Nginx otvoriť na porte číslo 80 v kontajneri a prepojiť ju na port číslo 8080 na hostiteľskom počítači.
Docker umožňuje vytváranie sieti medzi konkrétnymi kontajnermi, čo má výhodu pri komplexnejších systémoch.
Docker Compose
Ide o nástroj, vďaka ktorému môžeme výrazne zjednodušiť vytváranie a nastavenie komplexného prostredia z viacerých kontajnerov, sieti a dát. Nastavenia pre nástroj Compose ukladáme do textového súboru s názvom docker-compose.yml
.
Docker Swarm
Nástroj, vďaka ktorému môžeme spravovať viacero inštalácií projektu Docker (nody). Zabezpečuje orchestráciu takéhoto prostredia.
Kedy a prečo Docker používať
Existuje niekoľko vlastností projektu Docker, vďaka ktorým je výhodné používať ho.
Reprodukovateľnosť a práca v tíme
Na každom operačnom systéme, ktorý má nainštalovaný Docker, je možné spustiť obraz (image) a vytvoriť tak kontajner s rovnakým prostredím. Windows, MacOS alebo Linux – nie je dôležité, ktorý operačný systém používame. Ak teda vo vývojárskom tíme členovia používajú rôzne operačné systémy, nemusia si nainštalovať alebo plne virtualizovať iný operačný systém. Stačí nainštalovať Docker a spustiť kontajner s požadovaným operačným systémom a nástrojmi.
Izolácia a rýchlosť
Inštalácia a nastavenia akýchkoľvek nástrojov v kontajneri nijako neovplyvnia hosťovský operačný systém ani iný kontajner. To znamená, že na jednom serveri môžeme mať spustený v jednom kontajneri webový server a v druhom databázový server, pričom sa nemusíme starať o prípadné závislosti a konflikty z nich vyplývajúce. Takto môžeme rýchlo nastaviť vývojové prostredie s požadovanými nástrojmi a skúšať rôzne alternatívy bez ohrozenia stability hosťovského operačného systému.
Bezpečnosť
Izolácia jednotlivých komponentov môže priniesť zvýšenie bezpečnosti. Zároveň ide o spôsob ako sa izolovane dajú prevádzkovať staršie aplikácie napríklad už bez dostupnej technickej podpory.
Kedy Docker radšej nepoužiť
Každá technológia je dobrá v niektorých prípadoch a v iných zase môže byť výhodnejšie siahnuť po inom riešení. Toto sú prípady, kedy sa Docker neoplatí použiť.
Komplikovanosť a rýchlosť
Ak je aplikácia príliš komplikovaná a potrebujeme, aby bola čo najrýchlejšia, Docker nie je dobrý nápad. Pridáva totiž ďalšie vrstvy, ktoré stoja medzi hosťovským operačným systémom a aplikáciou, čo prirodzene celkovú rýchlosť aplikácie spomaľuje. Jednoducho, ak aplikácia potrebuje viac zdrojov a je náročné ju horizontálne škálovať.
Aplikácia s grafickým používateľským rozhraním (GUI)
Ak vyvíjame aplikáciu, ktorá sa obsluhuje v grafickom prostredí myšou (teda nie výhradne cez príkazový riadok), Docker nie je vhodný nástroj. V takomto prípade je lepšie použiť počítač s požadovaným operačným systémom alebo virtualizovať kompletný operačný systém.
Inštalujeme Docker
Ukážeme si inštaláciu projektu Docker na operačnom systéme Ubuntu 20.04. Inštalácia pre operačné systémy Windows a MacOS prebieha v grafickom prostredí Docker Desktop, ktorý nás prevedie celým procesom inštalácie. Príkazy projektu Docker však budú fungovať na každom operačnom systéme rovnako.
V prvom rade je potrebné zabezpečiť aktuálnosť všetkých balíkov. Nainštalujeme teda všetok updatovaný softvér pomocou dvoch príkazov v jednej dávke:
sudo apt update && sudo apt upgrade
Ak systém nájde aktualizovateľné balíčky, takto sa opýta, či ich chcete začať inštalovať:
Do you want to continue? [Y/n]
Stlačíme kláves y
ak chceme začať aktualizačný proces alebo kláves n
, ak aktualizovať nechceme. Následne stlačíme kláves Enter
.
Na inštaláciu projektu Docker použijeme oficiálny skript, ktorý inštaláciu v termináli zjednoduší na 2 príkazy:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Odteraz môžeme spúšťať kontajnery a využívať všetky ostatné nástroje projektu Docker.
Ak by ste chceli používať Docker ako používateľ bez root oprávnenia, mali by ste zvážiť pridanie svojho používateľa do skupiny „docker“ napríklad ako:
sudo usermod -aG docker užívateľ
Zhrnutie
Zadefinovali, čo je Docker, kedy je vhodné použiť ho a kedy radšej nie. Nainštalovali sme Docker a ukázali sme si, ako v ňom jednoducho a rýchlo spustiť prostredie Linuxovej distribúcie Ubuntu.