Lekce 1 - Docker - Teorie a instalace
Vítám všechny středně pokročilé programátory v kurzu o Dockeru. V tomto on-line kurzu si postupně ukážeme, jak tento magický nástroj funguje a jak s ním pracovat.
Minimální potřebná znalost
Jelikož se jedná o průřezový kurz, je vhodné na začátku zmínit, že jsou vyžadovány určité vstupní znalosti:
- základní práce s počítačem je úplná samozřejmost (instalace programů a tak dále)
- porozumět příkazům v cmd (příkazová řádka pro Windows) nebo terminálu (příkazová řádka pro Linux/Mac)
- znalost jednoho z jazyků - PHP, C# .NET, Java, Node.JS nebo Python. Musíme si totiž vytvořit nějaký projekt v Dockeru, který si následně spustíme
- znalost některé z databází (v případě, že budeme potřebovat databázi v projektu)
Co je vlastně Docker?
Docker je virtualizační nástroj, který umožňuje "zabalit" aplikaci do kontejneru a tu pak spouštět bez ohledu na prostředí. Nebo ještě jednodušeji: Docker může "zabalit" aplikaci a její závislosti do virtuálního kontejneru, který lze spustit na jakémkoli počítači se systémem Linux, Windows nebo macOS. Kontejnery totiž vyřešili zásadní nedostatek plné virtualizace.
Kontejnerizace vs plná virtualizace
U plné virtualizace je umožněno vytvářet nové virtuální stroje. Nicméně každý virtuální stroj (počítačový soubor, který se chová jako skutečný počítač) co vznikne, se chová jako vlastní operační systém, a tím pádem vznikají velké režijní náklady.
Některé zdroje uvádí, že plná virtualizace může spotřebovat až 20 % výkonu serveru.
Oproti tomu, kontejnerizace využívá virtualizaci jádra operačního systému, poté jsou všechny kontejnery spouštěny v jednom operačním systému. Díky tomu, že kontejner obsahuje jen specifické soubory pro danou aplikaci, je zaručeno snížení režie a velikosti. Což jsou samozřejmě vlastnosti, které se nám hodí.
Virtualizační nástroj Docker byl poprvé uveřejněn v roce 2013 jako open source software, což znamená, že zdrojové kódy jsou volně k dispozici a všichni mohou přispívat k vývoji tohoto nástroje. Celý Docker je napsaný v programovacím jazyce GO.
Také je použitelný na všech aktuálně známých a rozšířených platformách (Linux, Win a Mac).
Instalace
Nainstalovat si Docker na svém počítači není vůbec náročná operace. Zároveň je velmi podobná na většině operačních systémů. Společně se podíváme na instalaci na Mac a Windows.
Mac prostředí
Nejdříve si stáhneme instalační soubor v oficiální dokumentaci Dockeru pro Mac:
Vybereme si odpovídající tlačítko v závislosti na našem procesoru a po
kliknutí dojde k automatickému stažení. Primárně se všechny soubory
stahují do složky Downloads/
. Najdeme tedy právě stažený
soubor Docker.dmg
a spustíme ho.
Instalace probíhá jako u klasické aplikace, kde klikáme na tlačítko Next dokud se vše nenaistaluje 😊:
V případě že vše dopadlo v pořádku, uvidíme na ploše známou ikonu Dockeru.
Windows prostředí
Nyní si ukážeme instalaci pro windowsáky.
Požadavky na instalaci
Při instalaci na operačním systému Windows je potřeba mít v patrnost určité předpoklady:
- procesor podporující SLAT (Second Level Address Translation)
- povolenou virtualizaci v BIOSu
- mít nainstalovaný Hyper-V a/nebo subsystém Linux (pokud nebudete mít
něco z toho nainstalováno, Docker nás na to při spuštění programu
upozorní a následně se vypne)
- pro subsystém je třeba povolit funkci WSL ve Windowsu
Nejdříve si stáhneme instalační soubor z dokumentace Dockeru:
Po kliknutí dojde k automatickému stažení. Většinou se všechny soubory
stahují do složky Downloads/
(stažené soubory). Najdeme
stažený soubor Docker Desktop Installer.exe
a spustíme ho.
Instalace probíhá jako u klasické aplikace, kde klikáme na tlačítko Next dokud se vše nenaistaluje. V případě že vše dopadlo v pořádku, uvidíte na ploše známou ikonu Dockeru.
Ověření instalace
Předpokládejme, že se nám podle návodu výše povedlo Docker nainstalovat. Jako vždy po instalaci je vhodné si instalaci ověřit. Jsme vývojáři, a proto budeme primárně používat terminál (resp. příkazovou řádku pro Windows). Otevřeme si terminál (ve Windowsu můžeme pomocí kláves Ctrl+R) a napíšeme příkaz:
docker version
Pokud vše proběhlo v pořádku uvidíme podrobné informace ve výpisu:
Příkaz version
má jeden volitelný parametr
--format
(zkráceně -f
). Pokud chceme například
zobrazit jen verzi klienta, je možné napsat příkaz:
docker version --format '{{.Client.Version}}'
.
Instalace IDE
Pro psaní Docker souborů a práci s Dockerem nám stačí úplně obyčejný textový editor. Nicméně doporučuji si naistalovat nějaké vývojové prostředí. Osobně mohu doporučit následující vývojová prostředí Visual Studio Code, Eclipse a nebo IntelliJ IDEA.
Visual Studio Code
Jedná se o editor zdrojového kódu, který je vyvíjen společností Microsoft. Velkou výhodou je, že je zcela zdarma a je možné ho rozšířit o mnoho pluginů (včetně pluginu právě pro práci s Dockerem). Výborně se hodí pro rychlou úpravu zdrojového kódu. Limity VSC se začínají projevovat při práci na větších projektech, zejména při vývoji v Javě. VSC má i omezené možnosti debuggování.
Osobně doporučuji mít VSC nainstalované a používat ho pro rychlou úpravu kódu.
Visual Studio Code si můžeme stáhnout na oficiálních stránkách nebo si projít přímo specializovaný kurz.
Eclipse
Je open source vývojová platforma, která je primárně známá pro programování v jazyce Java. Nicméně flexibilní návrh ji umožňuje rozšířit za pomocí pluginů o velké množství programovacích jazyků. Velkou výhodou je, že je taktéž zdarma.
Eclipse si můžeme stáhnout na oficiálních stránkách nebo si projít přímo specializovaný kurz.
IntelliJ IDEA
Je multiplatformní vývojové prostředí, které podporuje mimo Javy například Groovy, Kotlin a jiné. Nutno poznamenat, že IntelliJ IDEA je zdarma pouze ve výukové variantě. Pro instalaci a práci s prostředím doporučuji kurz Pokročilá práce s IntelliJ IDEA. Balík ke stažení IntelliJ IDEA najdeme na oficiálních stránkách jetbrains.
Doporučuji provést instalaci a práci v IntelliJ IDEA. Obrázky z kurzu budou právě z IntelliJ IDEA.
Základní pojmy
Jak jsme si uvedli na začátku, funkce Dockeru je taková, že zabalí aplikaci a její závislosti do virtuálního kontejneru, který lze spustit na jakémkoli počítači se systémem Linux, Windows nebo macOS.
Na začátek si uvedeme výrazy, které nás budou po celou dobu kurzu Dockeru provázet:
Dockerfile
- textový soubor, který obsahuje příkazy na automatizaci sestavení obrazu- Build - proces pro sestavení aplikace
image
- soubor ke spouštění obrazu- run - proces spouštění obrazu
container
- kontejner (vnitřek obrazu). Je izolován od operačního systému a můžeme ho spustit či zastavit.
Na obrázku níže vidíme, jak spolu všechny výrazy souvisí:
Řekněme si k těmto pojmům trochu více.
Dockerfile
Dockerfile
je námi vytvořený soubor, ve kterém píšeme
postup, jak se mají vytvářet images (obrazy). Popisujeme zde
všechny kroky, které je potřeba vykonat. Zároveň zde můžeme provést i
nutná nastavení pro hladký běh naší aplikace.
Pro představu přikládám soubor Dockerfile
pro spuštění
aplikace v programovacím jazyce Python:
FROM python:3.8-slim-buster WORKDIR /app COPY requirements.txt requirements.txt RUN pip3 install -r requirements.txt COPY . . CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
Build
Build je proces pro vytvoření obrazu z Dockerfile. Proces
se spouští příkazem docker build .
, který má několik
volitelných argumentů. Ty si probereme v průběhu kurzu.
Více o formátu příkazu build
se můžeme
dozvědět z oficiální
dokumentace.
image
Ze souboru Dockerfile
si pomocí procesu build
vytvoříme image
, což je soubor používaný ke
spuštění kódu v kontejneru. Docker image je vytvořený tak, aby se
dal "spustit" na jakémkoliv počítači, kde je nainstalovaný program
Docker.
Image si můžeme připodobnit k datovému nosiči (například CD, DVD nebo flash disk).
Run
Run je proces, kterým se spustí instance z image. Výhoda
Dockeru je, že z jednoho image můžeme spustit prakticky neomezené množství
kontejnerů. Proces spouštíme příkazem docker run
. V kurzu si
ukážeme, jak tento příkaz správně používat a jak nastavovat jednotlivé
parametry.
Více o formátu příkazu run
si můžeme opět
dočíst v oficiální
dokumentaci.
Pokud jsme si představili image jako CD-nosič, tak proces Run si můžeme představit jako zasunutí a spuštění CDčka.
container
Kontejnery jsou balíčky softwaru, které obsahují všechny nezbytné prvky pro běh našeho programu v jakémkoli prostředí. Docker kontejner je instancí Docker image ve kterém se spustí nějaký (definovaný) proces. Kontejner má svůj vlastí životní cyklus a může se nacházet v různých stavech. O kontejnerech si povíme více v následujících kapitolách.
Pokud jsme si image představili jako CD nosič, tak container si můžeme přirovnat k mechanice.
A to je na úvod vše 🙂
V další lekci, Docker - Dockerfile, build a Image, si řekneme jak napsat jednoduchý Dockerfile a pomocí procesu build vytvořit nový image.