Co je to vlastně Docker? No není to uplně snadné vysvětlitelné, ale pokusím se o základní popis. Docker je pouze nadstavba pro linuxovými kontejnery, zkratka LXC - LinuX Container. Jen pro upřesnění nejedná se v žádném případě o virtualizaci. Mnohem bližší přirovnání by bylo něco jako chroot a virtualenv. Základní stavebním kamenem jsou zkompilovaný obrazy (images) různých distribucí nad kterým spouštíme procesy, proces běží v uzavřeném prostředí (kontejneru), ale je spuštěn jako jakýkoliv jiný - aspoň se nám tak tváří a můžeme jej vidět ve svém správci procesů. Takže nelze kontejner chápat jako samostatně běžící systém, ale spíš jako proces běžící z uzavřeného libovolného prostředí.
A jak začít? Nejprve si nainstalujeme a spustíme službu Docker. Na ukázku použijeme distribuci Fedora, ale instalační balíček má stejný název i v Ubuntu, popřípadě jiných distribucích.
>> yum install docker -y && service docker start
Docker sice máme nainstalovaný, ale abych jej mohli použít musíme vystupovat s administratorskými právy, což není pro práci příliš pohodlné. Tak že nastavíme uživateli přístup ke službě a to snadno přidáním do skupiny docker.
>> sudo usermod -aG docker $USER
Zkontrolujeme příkazem "id" jestli je náš uživatel přiřazen do skupiny 141(lxd)
>> id
uid=1000(pavel) gid=1000(pavel) skupiny=1000(pavel),27(sudo),132(libvirtd),135(docker),141(lxd)
Teď si ukážeme pár zakladních příkazů které se nám hodí pro začátek.
>> docker search <name> # hledání obrazu ve veřejném repozitáři
>> docker pull <name> # stáhnutí zkompilovaného obrazu
Další užitečné příkazy slouží k práci s vytvořeným kontejnerem. Pro seznam běžících kontejnerů použijeme následující příkaz, s tím že, pokud jej použijeme s parametrem -a dostaneme všechny kontejnery, tedy i ty které neběží.
>> docker ps (-a)
další příkazy nám poslouží pro práci s bežícím kontejnerem
>> docker run <hash> # spuštění
>> docker kill <hash> # zabití
>> docker attach <hash> # připojit se
>> docker rm <hash> # smazání
Základní příkazy známe. A teď trochu praktickické ukázky. Vezmeme si náhodný projekt napsaný v Django - https://github.com/pajinek/vhm. Shodou okolností je to můj projekt na manegování webových projektů na různých systémech.
Pokud si chceme vlastní image Dockeru přidat do veřejného repozitáře, stačí se zaregistrovat na strákách https://registry.hub.docker.com/, kde je nejsnadjěnší cestou propojit automatickou kompilaci obrazu s naším guthubem nebo bitbucketem. Můj obraz je už vytvořený automatickým buildem na odkazu https://registry.hub.docker.com/u/varhoo/vhm-server/. Obraz si stáhneme následujícím příkazem.
>> docker search vhm
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/pajinek/vhm-server 0 [OK]
>> docker pull pajinek/vhm-server
Obraz se nám stáhnul do počítače a teď je možné jej spustit, seznam všech stažených obrazů získáme příkazem
>> docker images
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/varhoo/vhm-server 0 [OK]
Teď už nám stačí jen spustit službu, vzhledem k tomu, že se jedná o webovou aplikaci, budeme se chtpít k ní dostat přes nějaký port, vytvořený obraz běží na portu 8000, takže nám teď jen stačí směrovat z portu na systému do portu kontejneru. To provedeme parametrem -P, kde první port udává vnější port systému a druhý pak port v kontejneru. Docker můžeme spustit na pozadí s parametrem -d nebo interaktivně a to s parametrem -i (jako v této ukázce).
>> docker run -i -t -p 80:8000 varhoo/vhm-server
Validating models...
0 errors found
July 22, 2015 - 10:23:35
Django version 1.5.12, using settings 'vhm.settings'
Development server is running at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
Pokud bychom spustili Docker na pozadí (-d) můžeme se k němu připojit pomocí následujícího příkazu.
>> docker run -d -t -p 80:8000 vhm-server
bbb3c23cefb292eb57a31ad02df20eb1e4a45beff9cfc43015916224f1a57160
>> docker ps | grep vhm
bbb3c23cefb2 vhm-server "/bin/sh -c '. env/b 25 seconds ago Up 24 seconds 0.0.0.0:80->8000/tcp dreamy_meitner
>> docker attach bbb3c23cefb2
[22/Jul/2015 01:04:11] "GET /admin/ HTTP/1.1" 200 5446
Častokrát se nám může stát, že se budeme chtít připojit k shellu již běžícího kontejneru, abych mohli prozkoumat jeho stav. To provedeme následujícím příkazem, který spustí nový proces shellu na který se v zápětí připojí.
>> docker exec -it bbb3c23cefb2 /bin/bash
V dalších dílech se pak podíváme jak si takový image Dockeru (Dockerfile) vytvořit. Článek vychází z osobní wiki http://wiki.varhoo.cz/index.php/Docker