Lab 04 – Docker síť a volumes

Lab 04 – Docker síť a volumes

Cíl: překlad jmen mezi kontejnery a data, která přežijí. Tahák: Docker

Sítě

# 1 – výchozí sítě
sudo docker network ls

# 2 – na výchozím bridge překlad jmen NEfunguje
sudo docker run -d --name db busybox sleep 3600
sudo docker run --rm busybox ping -c1 db          # bad address 'db'

# 3 – vlastní síť dá DNS podle jména kontejneru
sudo docker network create appnet
sudo docker run -d --name db2 --network appnet busybox sleep 3600
sudo docker run --rm --network appnet busybox ping -c1 db2    # funguje

Tohle je nejužitečnější věc, kterou síťování Dockeru dělá, a je to koncept, který Kubernetes Service zobecňuje: dosáhnout na pohyblivý cíl přes stabilní jméno. Rozdíl je v tom, že jméno v Dockeru ukazuje na jeden kontejner, kdežto jméno Service na ty pody, které jsou zrovna připravené.

# 4 – host mode: žádná izolace, -p netřeba
sudo docker run -d --name hostweb --network host nginx:1.27
curl -s localhost:80 | head -3
sudo docker rm -f hostweb

# 5 – none: žádná konektivita
sudo docker run --rm --network none busybox ip -brief address   # jen loopback

Volumes

# 6 – pojmenovaný volume: data přežijí kontejner
sudo docker volume create appdata
sudo docker run --rm -v appdata:/data busybox sh -c 'echo persisted > /data/file'
sudo docker run --rm -v appdata:/data busybox cat /data/file      # pořád tam
sudo docker volume inspect appdata                                # kde leží na disku

Oba kontejnery jsou pryč, data ne. Volume spravuje engine a leží pod /var/lib/docker/volumes na support01.

# 7 – bind mount: adresář hostitele, jen pro čtení
mkdir -p ~/site && echo '<h1>bind mount</h1>' > ~/site/index.html
sudo docker run -d --name bweb -p 8082:80 \
  -v ~/site:/usr/share/nginx/html:ro nginx:1.27
curl -s localhost:8082
echo '<h1>zmeneno na hostiteli</h1>' > ~/site/index.html
curl -s localhost:8082                # změna hned, bez restartu

Bind mount je okno do souborového systému hostitele. Pohodlné pro vývoj a nejbližší obdoba hostPath v Kubernetes – se stejnou nevýhodou: přivazuje aplikaci k jednomu stroji.

Úklid

# 8 –
sudo docker rm -f db db2 bweb
sudo docker network rm appnet
sudo docker volume rm appdata
Poznámka

Držte si mapu pojmů: Docker volume → PersistentVolume, bind mount → hostPath, překlad jmen kontejnerů → Service, --network container: → pod.