/ Docker

Docker Master (1. část) - Základ

Tak a máme tu začátek něčeho velkého. Rozhodl jsem se, sepsat kompletní návod okolo Dockeru a různých jeho částí jako jsou Docker-Compose, Docker-Swarms a Kubernetes. Docker se totiž stává každodenní součástí IT světa, stává se tedy z toho základ a je určitě prospěšné aby každý, kdo zastává nějakou funkci v IT znal aspoň základy o Dockeru a jak funguje.

Návody budou vycházet každý měsíc - 1 měsíc = 1 návod. Celkově bude odhadem asi okolo 10 návodů, ve kterých si probereme úplné základy až pořádný networking s Dockery.

V této části si ukážeme

  • Proč Docker a jak funguje
  • Základní dělení Dockeru na CE a EE + rozdíly
  • Instalace Dockeru na Windows, Mac a Linux (Ubuntu)
  • Spuštění prvního containeru - NGINX

Co je to Docker?

Ve zkratce Docker je containerový manager aplikací, to znamená, že každá aplikace běží ve svém vlastním containeru bez ohledu na to, co se nachází na daném localhostu (počítači/serveru). Je tím myšleno to, že zaizolujeme aplikaci (image), jasně stanovíme podmínky pro spuštění a tak to bude vždy s těmito podmínkami fungovat - zkrátka container (kontejner).

Proč Docker?

Každý znás, kdo někdy měl server nebo alespoň zná a ví jak fungují aplikace ví, že každá aplikace vytváří při spuštění proces. V linuxu to jsou services, u Windowsů to jsou prostě program procesy. Ovšem, tyto procesy mají přístup k celému počítači, jsou tedy závislé na tom, co je na serveru nainstalováno - př. PHP 5.6 ale naše aplikace běží na PHP 7.0. Je tedy ihned jasné, že vznikne problém a že na daném serveru, je potřeba nainstalovat novější PHP.

Docker toto řeší tak, že když vytváříme tzv. Image, které později spustíme v Containeru tak stanovíme, že se má používat PHP 7.0 bez ohledu na to, co je nainstalováno na serveru. Proč? No protože se to spustí v Containeru, do kterého se to stáhne a spustí. Odpadá tedy následující problém...

Představme si, že děláme na projektu v 4 lidech. Jedná se o projekt který vyžaduje NodeJS, PHP, MySQL, Redis a Javu. Pro to, aby na tom každý mohl pracovat, musí mít nainstalovanou správnou verzi NodeJS, PHP atd... jinak na aplikaci nemůže dělat natož jí spustit.
Ovšem pokuď budeme mít Docker Image, stačí ho stáhnout a pomocí 1 příkazu spustit. Docker vše potřebné stáhne do svého Containeru a spustí -> odpadá tím xxx problémů s spuštěním na jiných serverech, počítačích atd.

Rozdíl mezi dedikovaným hostem, virtuálními stroji a Dockerem

Dedikovaný host

Známe to + jak jsem popisoval, na serveru máme nainstalované PHP 5.6, Javu 8 a spuštěnou nějakou 1-2 aplikace, které to využívají a fungují s tím správně. Co když ale potřebujeme spustit další aplikaci, která ale vyžaduje PHP 7.0 nebo Javu 10. Ejhle problém... samozřejmě řešení je koupit další server, ovšem toto řešení není nijak ekonomiky a ani peněžně prospěšné. No, v tomto případě ti nezbyde nic jiného...

VPS aneb virtuální stroje

Představme si opět že máme aplikaci s PHP 5.6 a Javu 10. Jelikož máme VPS, tak můžeme klidně na dedikovaném serveru spustit 3x virtální server. A v každém vlastní verzi PHP a Javy. Jenže opět narazíme na problém, a to ten že každý server žere nějaký to procento z RAM paměti, že potřebujeme x3+ loginů. Což ve výsledku, kdy nějaká firma má stovky serverů může být naprostá přihlašovací katastrofa.

Docker

Zde zjistíš, proč je Docker tak populární a oblíbený. Opět si představíme stejný problém, ovšem zde je vše spuštěno v Docker Containerech. Každá aplikace má svůj, svojí verzi PHP, svojí verzi Javy. Vše pod jedním systémem s vlastníma dependency. V tom je výhoda Dockeru...

Docker ekosystém

Jak to tak bývá, každá aplikace má svojí komunitní verzi nebo-li Community Edition tedy Docker CE a poté Enterprise verzi tedy Docker EE pro velké podniky s mnoha lepšími nástroji pro správy a údržbu. Vyjímkou není ani Docker, nyní si je probereme...

Ve všech návodech budeme používat Docker CE, jelikož Docker EE jsou placené.

Verzování

Docker se také dělí do několika verzí a to podle verze stability, podle měsíce a roku a podle licence.

  • Edge - je verze, která vychází každý měsíc s nejnovějšíma features.
  • Stable - je verze, která vychází každé 4 měsíce - je opravdu stabilní, což Edge někdy být nemusí.

Dále v verzi najdeme rok a měsíc vydání, nyní ti vypíšu pár příkladů verzí Dockeru:

  • v17.08.0-ce - Je Docker CE vydaný v roce 2017 v 8. měsíci.
  • v18.01.2-ce - Je opět Docker CE, vydaný ale v roce 2018 s 2. patchem.
  • v18.04.0-ee - Enterprise edice pro rok 2018 v dubnu.

Zde je ukázka, jak tedy fungují updatovací cykly Dockeru. Doporučuje se tedy pro produkci instalovat Stable a pro nadšence Edge.

1_hoWe-xAW-NlTRJ89RvHvog

Instalace Dockeru

Jak jsem psal, budeme používat komunitní verzi Docker CE, která není ochuzená o žádné základní věci, ba naopak obsahuje vše potřebné pro pochopení a správu našich budoucích aplikací.

Instalace na Linuxu

Instalace je testována na Ubuntu 16.04.3 LTS. A je více než samozřejmostí, že instalace bude fungovat zcela stejně na novějším Ubuntu 18.04 LTS.

K nainstalování Dockeru stačí napsat do konzole tyto příkazy, každý postupně:

curl -sSL https://get.docker.com/ | sh
sudo systemctl start docker

První příkaz je automatický script, který detekuje verzi Linuxu a distribuce a poté stáhne Edge verzi Dockeru a nainstaluje.
K ověření funkčnosti napíšeme následující příkaz:

docker version

Pokuď je vše správně nainstalováno měly by se ti zobrazit základní parametry Dockeru a Docker-Machine (vysvětlím později). Ukázka instalace z konzole:







To je zatím vše, nyní máš Docker v Linuxu! Takže nažhav prstíky a přesuň se dolů na první část.

Instalace na MacOS

Na Macu je vše prakticky jednoduší, i když né vždy to platí. Instalace Dockeru se neinstaluje přes konzoli ale pomocí standartíno Mac UI.

Jako první potřebujeme stáhnou .dmg soubor s instalací, který nalezneš zde:
https://store.docker.com/editions/community/docker-ce-desktop-mac

Poté klikni na Get Docker. Po stažení spusť soubor, a přesuň klasicky aplikaci do aplikací.

Pokuď chceš Edge verzi, sjeď dolů a tam je Get Docker CE Edge (MacOS)

Najeď do aplikací, najdi Docker a pusť ho. Začne se instalovat a nastavovat práva, je tedy možné, že to po tobě bude chtít administrátorské heslo. Bez něj se nehneš.

Až se vše nainstaluje a vše potvrdíš, tak v horní liště se ti ukáže ikonka Dockeru (verlyba) s kontejnery. Až se Docker spustí, tak znova klikni na ikonku a poté na About. A zjistíš jak a co máš za verzi.

A jako poslední kontrola, stačí opět do konzole na Macu napsat příkaz:

docker version

Instalace na Windowsech

Instalace na Windowsech je složitější než na Macu a Linuxu. Je to dáno tím, že Mac a Linux jsou na UNIXu, kdežto Windows ne. Vše se ale opět instaluje pomocí UI.

Pozor! K spuštění Dockeru musíš mít min. Windows 10 64-bit.

Jako první stáhneme instalační soubor kliknutím na Get Docker:
https://store.docker.com/editions/community/docker-ce-desktop-windows/

Pokuď chceš Edge verzi, sjeď dolů a tam je Get Docker CE Edge (Windows)

Poté již stačí Docker nainstalovat. Je možné že bude potřeba 1-2 restarty počítače, záleží na verzi Windows 10. Až vše bude hotovo, nezapomeň do konzole pro test napsat:

docker version

Samozřejmě musíš mít Docker spuštěný, měl/a bys mít ikonku vpravo dole.

Příkaz docker

Před samotným začátkem je potřeba se seznámit s základním příkazem. A tím je samozřejmě docker.

Pokuď tedy napíšeš do konzole docker help zobrazí se ti všechny subpříkazy, které lze s tímto příkazem používat. A pokuď chceš ještě více nápovědy, tak si stačí zvolit subpříkaz a opět k němu napsat help, tedy:

docker <COMMAND> --help

Spuštění první aplikace

Pokuď máš nainstalovaný Docker, tak jsi prvním krokem k budoucnosti. A abychom si ukázali budoucnost, tak si spustíme naší první aplikaci.

Jedná se o aplikaci přímo od dockeru na test, zda Docker funguje správně. Stačí do konzole napsat:

docker container run hello-world

Ano i Docker má Hello World. Co se ale stane po napsání? Nu Docker ti oznámí, že Images (na localhostu) neexistuje a tak se ho pokusí najít. Jelikož to je oficiální image přámo od Dockeru, tak to ho stáhne a spustí, jelikož jsme napsali v příkazu run. Zde je menší ukázka z konzole, jak to má vypadat:







Spuštění základního NGINX

Gratuluji právě jsi spustil svojí první "aplikaci" v dockeru! Bylo to těžké? Né?! Nu tak se vrhneme hned na něco těžšího. Co takhle si spustit v Dockeru přímo základní NGINX? Jdeme na to!

Jako první je potřeba stáhnout NGINX. Tento krok není povinný ale je dobré ho znát.

docker image pull nginx

Po stažení nám nezbývá nic jiného než spustit již zmíněný NGINX. Příkaz moc nezkoumej, probereme si ho po spuštění.

docker container run -d --name nginx-test -p 8080:80 nginx

Zde je jak to má správně vypadat:







Po napsání posledního již stačí najet do prohlížeče a zadat localhost:8080 a je tu default NGINX stránka.

Popis příkazu

Nu ale Waku, co ten příkaz přesně udělal? Tak si ho probereme po částech:

docker container run -d --name nginx-test -p 8080:80 nginx
  • docker container run - je základní příkaz na spuštění nějakého containeru s image.
  • -d - je subpříkaz, který je v plném znění jako -detach tedy, že spustí aplikaci na pozadí. Pokuď by tam nebyl uvidíš log containeru a po napsání CTRL/CMD + D by se container ukončil.
  • --name nginx-test - Nastavuje název containeru, pokuď bychom neuvedli název Docker by vymyslel nějaký random.
  • -p 8080:80 - Toto je velmi důležité, pokuď budeme používat aplikace, které používají internet nebo potřebuji jinou vzájemnou komunikaci.
      1. 8080 - namapuje port tedy 8080 na localhostu, aby byl přístupný zvenku.
      1. 80 - namapuje port tedy 80 na container pro vnitřní komunukaci mezi dalšími containery. Pokuď třeba mááme spuštěný container na MySQL, PHP aplikaci atd.
  • nginx - poslední část je název image, který jsme stáhli a chceme spustit.

Hurááá! Máš NGINX na localhostu! Nu a to je vše, nyní již stačí container s NGINX ukončit a smazat container, jelikož to je default NGINX.

docker container stop nginx-test
docker container rm nginx-test

Souhrn

Takže v této části jsme si vysvětlili, co je to Docker. Proč je užitečný a proč se tak hodně používá. Následně jsme si nainstalovali Docker na naše kompjůtry a nakonec jsme si zkusili spustit hello-world a NGINX.

V další části se podíváme na základní příkazy a správu images a containerů, kde je hledat a jak s nimi nakládat. :}