TL;DR
Docker je open-source platforma, která umožňuje spouštět aplikace v definovaném prostředí (závislosti, knihovny, konfigurace) nezávisle na zdrojích a infrastruktuře hardware. Jedná se o jednu z forem virtualizace.
Kontejner
- je to hlavní část Dockeru
- obsahuje samotnou aplikaci (s prostředím: závislosti, knihovny, config) a izoluje ji od infrastruktury
- největší výhoda: lze je přenášet (na mém počítači a na vzdáleném serveru se bude aplikace chovat stejně)
- technické základy:
- Docker používá namespaces pro oddělení jednotlivých kontejnerů (a každý si myslí, že má zdroje jen pro sebe), cgroups pro oddělení a omezení zdrojů pro jednotlivé kontejnery a UnionFS jako abstrakci nad filesystémem, který mu umožňuje vytvářet volumes, mountovat složky do/z kontejneru apod.
- jsou vrstvené - tvoří se z tzv. předpisu (= Image), který obsahuje instrukce pro vytvoření kontejneru
- Image je definovaný v souboru
Dockerfile
- první řádek identifikuje Image ze kterého se má začít - jeden řádek v
Dockerfile
je jedna vrstva- a kontejnery mohou základní vrstvy mezi sebou sdílet (šetří se místem)
- a jednotlivé vrstvy se mohou cacheovat, pokud už ji mám, tak se nasdílí místo nového stahování
- příkazy instalují balíčky, kopírují soubory, spouští programy, kompilují apod.
- mohu definovat proměnné prostředí a rovnou spustit program
- Image je definovaný v souboru
Rozdíl proti virtuálním strojům
- pomocí Dockeru jsme schopni dosáhnout virtualizace stejně jako s virtuálními stroji (VMs)
- výhoda kontejnerů je to, že “simulují” na aplikační vrstvě - to jim umožňuje oddělit aplikace od sebe, ale zároveň všechny využívají společný OS kernel (každý kontejner běží jako oddělený uživatelský proces)
- velikostně jsou v řádu desítek MB
- šetří se místem i díky vrstvám
- neobsahují jádro OS, což snižuje režii
- velikostně jsou v řádu desítek MB
- narozdíl VMs slouží jako abstrakce fyzického hardware a jedna jednotka obsahuje celý OS s binárkami, závislostmi a samozřejmě finální aplikací
- hypervizor je software, který pro jednotlivé VMs simuluje hardware (aby si VMs mysleli, že běží na počítači sami) a odděluje fyzické prostředky stroje od VMs
- velikostně jsou v řádu GB a startují mnohem pomaleji než lehké kontejnery
Orchestrace kontejnerů
- tím, že můžeme projekt rozdělit na více aplikací (microservices, databáze, hlavní část apod.), tak je potřeba řešit mimo vzájemné spolupráce (přes nějaké API) taky rozdělení využití hardwarových prostředků
- to zajišťuje třeba Cubernetes nebo Docker Swarm - ty nasazují na klastr serverů
- Docker Compose - nasazuje na jednom stroji
- nástroj pro definici a spouštění aplikace o více kontejnerech
- popis v jazyce YAML
Distribuce kontejnerů
- kontejner Dockeru není jenom forma virtualizace, ale je to i způsob distribuce software
- obsahuje všechny závislosti ve správných verzích (někdy obsahuje i celý základ distribuce Linuxu)
- nahrazuje .tar.gz, .war, .deb, .rpm
- je možné je distribuovat přes Registry kontejnerů
Registry kontejnerů
- = repozitáře obrazů kontejnerů (images)
- jsou veřejné (Docker Hub, Quay.io, Tutum.co) a na nich je možnost i privátních repozitářů (placené, pro menší firmy)