Linux: Kniha kouzel, vanilková příchuť 1.17 (27. února 2022)
Veškerá moc příkazové řádky/příkazového řádku přehledně, pro začátečníky i pokročilé

6. Docker

Řada 1.x vanilkové příchuti Linuxu: Knihy kouzel je od 1. října 2020 do 1. března 2023 ve stavu dlouhodobé pasivní údržby; nahlášené chyby budou opravovány, ale aktivní vývoj se již věnuje novější vývojové řadě určené pro novější verze operačního systému a programů. Pokud nejste vázáni na starší verze programů, doporučuji vyhledat novou verzi z aktivně vyvíjené vývojové řady.
kontejnery program virtualizace

1. Úvod

Docker je nástroj pro odlehčenou virtualizaci formou takzvaných kontejnerů. Kontejner obsahuje vlastní podstrom procesů, který je izolovaný od zbytku systému (má vlastní souborový systém, konfiguraci, knihovny, démony, síťové rozhraní a IP adresu), ale sdílí s ním jádro a výpočetní prostředky. To umožňuje bezpečný a snadno přenositelný běh programů určených pro jiné distribuce (můžete např. na nejnovější Fedoře spouštět program ze staré verze Debianu apod.). Nevýhodou Dockeru je, že jeho používání vyžaduje oprávnění superuživatele a nepodporuje přímo spouštění grafických aplikací nebo přímý přístup k hardwaru (i barvy v terminálu je tam podtřeba zprovoznit). Nejčastěji se používá na provozování databází.

Použití Dockeru obecně probíhá tak, že napíšete vlastní Dockerfile, z něj sestavíte obraz a z tohoto obrazu pak vytváříte kontejnery, které spouštíte. Kontejner může běžet buď na popředí (v příkazové řádce), nebo na pozadí.

Tato verze kapitoly pokrývá pouze základy Dockeru; nezmiňuje se o nástoji „docker-compose“ a pokrývá jen malou část dostupných „docker“-příkazů. Neuvádí specializované repozitáře jako např. „mysql“.

2. Definice

3. Zaklínadla (docker)

3/1 Práce s obrazy

vytvořit obraz z Dockerfilu#1 (1)
sudo docker build [-t repozitář[:tag-pro-obraz]] [--no-cache] .
vypsat lokálně dostupné obrazy#2
sudo docker images
smazat obraz (lokálně)#3
sudo docker rmi obraz
vyhledat vzdáleně dostupné repozitáře#4 (2)
sudo docker search [--limit=100] text-k-vyhledání
vypsat všechny vzdáleně dostupné repozitáře#5
˥vypsat vzdáleně dostupné obrazy z určitého repozitáře#6
přejmenovat obraz #7 (3)
sudo docker tag starý-repozitář[:starý-tag] nový-repozitář[:nový-označení-tag]
sudo docker rmi starý-repozitář[:starý-tag]
uložit obraz do souboru/načíst ze souboru#8 (4)
sudo docker save -o soubor obraz
sudo docker load -i soubor
uložit obraz na standardní výstup/načíst ze standardního vstupu#9
sudo docker save obraz
sudo docker load
stáhnout vzdálený obraz k použití lokálně#10 (5)
sudo docker pull obraz

3/2 Práce s kontejnery

vytvořit a spustit kontejer#1
sudo docker run [parametry] obraz [náhradní příkaz a jeho parametry]
vypsat seznam kontejnerů (jen běžících/všech na daném počítači)#2
sudo docker ps
sudo docker ps -a
zastavit kontejner (normálně/násilně)#3
sudo docker stop kontejner
sudo docker kill kontejner
znovu spustit zastavený kontejner#4
sudo docker start kontejner
smazat kontejner (jen zastavený/i běžící)#5
sudo docker rm kontejner
sudo docker rm -f kontejner
přejmenovat kontejner#6
sudo docker rename kontejner nové-jméno
spustit nový interpret příkazové řádky v již běžícím kontejneru (obecně/konkrétně)#7
sudo docker exec -it kontejner interpret
sudo docker exec -it ef95f2 bash
kopírování souborů z kontejneru/do kontejneru#8
sudo docker cp kontejner:/cesta/v/kontejneru cíl/mimo
sudo docker cp zdroj/mimo/kontejner kontejner:/cíl/v/kontejneru
vytvořit kontejner bez spuštění#9
sudo docker create [parametry] obraz

3/3 Pročištění systému

pročistit systém (po čase bývá nezbytné)#1
sudo docker system prune

3/4 Eskalace práv

přečtení souboru, který nemáte právo číst#1
sudo docker --rm -it -v "$(pwd):/root" ubuntu cat "/root/název souboru"
přepsání souboru, do kterého nemáte právo zapisovat#2
sudo docker --rm -it -v "$(pwd):/root" ubuntu bash -c "cat > '/root/název souboru'"
přivlastnění si cizího souboru#3
sudo docker --rm -it -v "$(pwd):/root" ubuntu chown $UID "/root/název souboru"

4. Zaklínadla (Dockerfile)

komentář#1
# komentář do konce řádku
ƿnačíst existující obraz a použít ji jako základ pro nový#2
FROM obraz
spustit příkaz#3 (6)
RUN příkaz
zkopírovat soubory a adresáře z kontextu sestavení do kontejneru#4 (7)
COPY zdroj [další-zdroj] cíl
vytvořit zadaný adresář a nastavit ho jako aktuální#5 (8)
WORKDIR cesta
nastavit výchozí proces kontejneru (obecně/konkrétně)#6
ENTRYPOINT ["příkaz"[, "parametr"]]
ENTRYPOINT ["/bin/bash", "-e"]
nastavit proměnné prostředí#7
ENV proměnná="hodnota" [další_proměnná="její hodnota"]

5. Parametry příkazů

5/1 docker run

sudo docker run [parametry] obraz [náhradní příkaz a jeho parametry]

6. Instalace na Ubuntu

sudo apt-get install docker.io

7. Ukázka

Dockerfile#1
FROM ubuntu:18.04
RUN apt-get update && apt-get upgrade -y && apt-get install -y mc vim
WORKDIR /root
ENTRYPOINT ["/usr/bin/mc"]
sestavení a spuštění obrazu#2
sudo docker build -t midnight-commander .
sudo docker run --rm -it midnight-commander

8. Tipy a zkušenosti

9. Další zdroje informací

Pro sestavení Dockerfilu je asi nejlepším informačním zdrojem online „Referenční příručka pro Dockerfile“. Pro spouštění je pak vhodná „Oficiální referenční příručka“. Oba zdroje jsou bohužel v angličtině.

Pro základní přehled lze použít i příkazy:

docker --help
docker příkaz --help
1 Pozor na tečku na konci příkazu, je povinná a bez ní příkaz skončí vypsáním nápovědy!
2 Uvedený příkaz má přednastavený limit 25 položek; parametrem lze počet zvýšit maximálně na 100.
3 Původní označení zůstane zachováno.
4 Uložený obraz doporučuji komprimovat (je ve formátu tar); obsahuje všechny vrstvy potřebné pro rekonstrukci obrazu, takže ho lze načíst i na počítači bez připojení k internetu. Rovněž je to vhodný způsob, jak si obraz zálohovat.
5 Tento příkaz obvykle není třeba používat, protože Docker chybějící obrazy stahuje automaticky, jakmile jsou potřeba.
6 Pozor, každý příkaz se spouští v nové instanci příkazovém intepretu „/bin/sh“!
7 Kontext sestavení (build context) je zvláštní oblast, kam se při spuštění příkazu „docker build“ rekurzivně zkopíruje veškerý obsah aktuálního adresáře.
8 Cesta může být i relativní.
AWKRegulární výrazyVim