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