🟡 Intermediate

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:80 namiesto -p 8080:80
  • Monitorujte sieťovú komunikáciu pomocou docker stats a network policies

Správne navrhnutá sieťová topológia je základom bezpečnej a výkonnej kontajnerovej infraštruktúry.