Lab 02 – Docker kontejnery
Lab 02 – Docker kontejnery
Cíl: životní cyklus kontejneru a proč záleží na zapisovatelné vrstvě. Tahák: Docker
# 1 – nejkratší možný kontejner
sudo docker run hello-world
sudo docker ps # nic – už skončil
sudo docker ps -a # a je tu, Exited (0)
Kontejner žije přesně tak dlouho jako jeho hlavní proces. hello-world vypíše
text a skončí, takže je po všem dřív, než ho docker ps uvidí. Ze stejného
důvodu skončí pod bez dlouho běžícího procesu v CrashLoopBackOff.
# 2 – interaktivní; ukončení shellu ho ukončí, --rm uklidí
sudo docker run -it --rm busybox sh
hostname # ID kontejneru, ne jméno hostitele
ip address # vlastní síťový namespace
ps aux # PID 1 je váš shell – vlastní PID namespace
exit
Tyhle tři příkazy jsou celá izolace: proces vidí vlastní hostname, síť a tabulku procesů, ale běží na jádře support01.
# 3 – dlouho běžící s publikovaným portem
sudo docker run -d --name web -p 8080:80 nginx:1.27
sudo docker ps
curl -s localhost:8080 | head -5
-p 8080:80 mapuje port na support01 na port v kontejneru. Bez toho je
kontejner dostupný jen zevnitř sítě Dockeru.
# 4 – podívejte se dovnitř běžícího kontejneru
sudo docker logs web # co proces zapsal na stdout
sudo docker top web # jeho procesy z pohledu hostitele
sudo docker exec -it web sh -c 'ls /usr/share/nginx/html; nginx -v'
sudo docker inspect -f '{{.NetworkSettings.IPAddress}}' web
Z logs, exec a inspect se stane kubectl logs, kubectl exec a
kubectl get -o yaml. Naučit se je teď není ztracený čas.
# 5 – stop, start, restart – souborový systém přežívá
sudo docker exec web sh -c 'echo hello > /tmp/marker'
sudo docker restart web
sudo docker exec web cat /tmp/marker # pořád tam
sudo docker stop web
sudo docker ps -a # Exited
sudo docker start web
Zastavení zapisovatelnou vrstvu nezničí – to udělá až docker rm.
# 6 – zapisovatelná vrstva mizí s kontejnerem
sudo docker rm -f web
sudo docker run -d --name web -p 8080:80 nginx:1.27
sudo docker exec web cat /tmp/marker # No such file
To je celý argument pro volumes a později pro PersistentVolumes.
# 7 – omezení zdrojů
sudo docker run -d --name small --memory 64m --cpus 0.2 nginx:1.27
sudo docker stats --no-stream small web
--memory a --cpus jsou limity cgroup – stejný mechanismus jako
resources.limits u kontejneru v Kubernetes.
Úklid
# 8 –
sudo docker rm -f web small
sudo docker ps -a