Co je to Docker
Docker je platforma umožňující běh softwarových kontejnerů. Kontejnery pak umožňují běh programu izolovaně od operačního systému pouze s knihovnami a nastavením, které je jím vyžadované. Kontejnery jsou instancemi images. Image popisuje co má v kontejneru běžet a z této „definice“ je spuštěn kontejner. K dispozici jsou předpřipravené images https://hub.docker.com/explore/ z nichž lze odvodit další.
Základní příkazy Dockeru
- docker images = vypíše seznam lokálních images
- docker ps = vypíše seznam běžících kontejnerů
- docker ps -a = vypíše seznam neběžících kontejnerů
- docker rm <kontejner> = smazat neběžící kontejner
- docker rmi <image> = smazat lokální image
- docker start <kontejner> = spuštění neběžícího kontejneru
- docker stop <kontejner> = ukončení neběžícího kontejneru
- Image lze stáhnout lokálně pomocí příkazu docker pull <jmeno img>:<verze>. Např. pro https://hub.docker.com/_/nginx/ docker pull nginx:1.13.5
Spuštění staženého image
docker run –name <pojmenování kontejneru> -d -p 8080:80 nginx:1.13.5
(na http://localhost:8080/ bude běžící nginx; poběží jako deamon)
Připojení do běžícího kontejneru
docker exec -ti <jméno kontejneru> /bin/sh
Docker run parametry
- –name <pojmenovani kontejneru> = libovolné jméno, pod kterým bude kontejner běžet
- -d = spustit kontejner jako deamona
- -p <venkovní port>:<vnitřní port> = mapování portu
- -v D:\docker\test\src:/usr/share/nginx/html:ro = mapování umístění v kontejneru
- :ro = pouze ke čtení (read only)
- lze použít více krát, na složky nebo i jednotlivé soubory
- –rm po ukončení běhu kontejneru dojde k jeho odstranění (nezůstane na seznamu běžících)
- -ti = běh v interaktivním módu
- -e <proměnná>=<hodnota> = environment variable
Dockerfile – vytvoření definice pro vlastní image
Příkaz: docker build -t <jméno např. autora>/<jméno image>:<verze> . Docker dokumentace pro build.
1 2 3 4 5 6 7 8 9 |
FROM alpine:3.4 MAINTAINER Joe RUN apk update RUN apk add vim RUN apk add curl && \ apk add git USER root #prepnuti uzivatele COPY ./x.txt /usr/src/x.txt |
Nový image podle příkladu vyjde z image alpine a přidá do něj vim, curl, git a nakopíruje soubor, který by byl přiložen vedle tohoto dockrfilu.
Při sestavování image, podle tohoto příkladu, by došlo k vytváření průběžných image. Příkazem docker images se vypíšou všechny lokální image, příkazem docker images -a se vypíšou i image, které nemají název, ale jen ID. Image bez názvu se použijí jako cache při opětovném sestavování image.
Odstranění bezejmených image lze pomocí docker image prune.
<none>:<none> image se dělí na 2 typy – viz: „What are Docker <none>:<none> images?“
Log kontejneru
docker logs <jméno kontejneru> (dokumentace docker logs)
Další informace o kontejneru lze získat např. pomocí docker inspect <jméno kontejneru> – viz. docker inspect.
Příklad spuštění WordPressu v dockeru
- docker run –name mysql -v D:\docker\mysql_storage:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.2 = spuštění kontejneru s databází MySQL, úložiště db je namapované na místo na disku mimo kontejner
- docker run -d –name wordpress –link mysql:mysql -p 8080:80 -v D:\docker\_test\wordpress:/var/www/html/wp-content wordpress:4.8.1-php7.1-apache = spuštění kontejneru s WordPressem; opět namapovaná složka mimo kontejner; spojení na kontejner s databází je pomocí parametru „link“
Parametr „link“ je nyní zastaralý – viz. „Legacy container links„. Nyní je doporučeno propojení provést přes „networking„.
Odstraní všech neběžících kontejnerů na Windows
1 |
FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i |
zdroj: https://gist.github.com/ngpestelos/4fc2e31e19f86b9cf10b
Poznámky vychází ze zdrojů:
- dokumentace Dockeru
- „Docker tutorials“ na YT a příslušných článků na http://takacsmark.com/
- https://f3l1x.io/blog/2017/04/16/docker-800-dni-pote/
- https://github.com/dockette/
- Docker: Intro to Networking (YT)