Docker Networking — Sieťovanie kontajnerov
Docker networking umožňuje kontajnerom komunikovať medzi sebou, s hostiteľským systémom aj s vonkajším svetom. Pochopenie sieťových módov je kľúčové pre správny návrh kontajnerizovaných aplikácií.
Čo je Docker Networking?
Keď Docker vytvorí kontajner, priradí mu sieťový namespace s vlastným IP stackom. Docker ponúka niekoľko sieťových driverov, z ktorých každý rieši iný use case. Defaultne existujú tri siete: bridge, host a none.
Ako fungujú sieťové módy
Bridge (default) — kontajnery dostanú IP adresu z internej podsiete (zvyčajne 172.17.0.0/16). Komunikujú medzi sebou cez virtuálny bridge. Porty sa sprístupňujú cez port mapping:
docker run -d -p 8080:80 nginx
# Host port 8080 → Container port 80
User-defined bridge — odporúčaný spôsob. Na rozdiel od defaultného bridge podporuje automatický DNS discovery — kontajnery sa nájdu podľa mena:
docker network create mynet
docker run -d --name web --network mynet nginx
docker run -d --name app --network mynet myapp
# app sa pripojí na nginx cez hostname "web"
Host — kontajner zdieľa sieťový namespace s hostom. Žiadna izolácia, ale žiadny overhead. Užitočné pre aplikácie citlivé na latenciu:
docker run --network host nginx
# nginx počúva priamo na porte 80 hosta
Overlay — prepája kontajnery naprieč viacerými Docker hostami. Používa VXLAN tunely. Nevyhnutný pre Docker Swarm a multi-host deployment:
docker network create --driver overlay --attachable prod-net
None — kontajner nemá žiadne sieťové rozhranie. Pre maximálnu izoláciu.
Macvlan — kontajner dostane vlastnú MAC adresu a javí sa ako fyzické zariadenie v sieti. Užitočné pre legacy aplikácie vyžadujúce priamy L2 prístup.
Praktické použitie
DNS discovery v user-defined sieťach eliminuje potrebu hardcódovania IP adries. Docker Compose to využíva automaticky — každá služba je dostupná pod svojím menom.
Port mapping podporuje TCP aj UDP:
docker run -d -p 53:53/udp -p 53:53/tcp dns-server
Inspekcia sietí:
docker network ls # zoznam sietí
docker network inspect mynet # detail siete s pripojenými kontajnermi
docker inspect --format '{{.NetworkSettings.IPAddress}}' web
Best Practices
- Vždy používajte user-defined bridge siete namiesto defaultnej — lepší DNS, izolácia aj kontrola
- Neexponujte porty, ktoré nepotrebujete — minimalizujte attack surface
- Oddeľte frontend a backend do rôznych sietí — kontajnery v rôznych sieťach sa navzájom nevidia
- Pre multi-host komunikáciu použite overlay siete alebo service mesh (Traefik, Envoy)
- Obmedzte port binding na konkrétnu IP:
-p 127.0.0.1:8080:80namiesto-p 8080:80 - Monitorujte sieťovú komunikáciu pomocou
docker statsa network policies
Správne navrhnutá sieťová topológia je základom bezpečnej a výkonnej kontajnerovej infraštruktúry.