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
Držte si mapu pojmů: Docker volume → PersistentVolume, bind mount → hostPath,
překlad jmen kontejnerů → Service, --network container: → pod.