Docker Netzwerke (mit praktischen Beispielen)

Als ich Docker angefangen habe, wirklich aktiv zu nutzen, war eines der ersten Themen, das mich regelmäßig verwirrt hat: Netzwerke. Container starten? Kein Problem. Aber sobald zwei Container miteinander sprechen sollten – oder ein Service von außen erreichbar sein musste – ging das Rätselraten los.

Warum funktioniert localhost manchmal und manchmal nicht? Warum kann der eine Container den anderen nicht erreichen, obwohl beide laufen? Genau an diesem Punkt habe ich gemerkt: Ich muss Docker-Netzwerke wirklich verstehen – nicht nur irgendwie benutzen.

In diesem Beitrag beschreibe ich meinen Weg und zeige dir Docker Netzwerke mit praktischen Beispielen, die du direkt ausprobieren kannst.


Was Docker unter „Netzwerk“ versteht

Docker bringt eigene Netzwerk-Treiber mit. Je nach Einsatzzweck wähle ich einen passenden Modus. Die wichtigsten sind:

  • Bridge – Standard für Container auf einem Host
  • Host – Container nutzt das Netzwerk des Hosts
  • Overlay – Netzwerk über mehrere Docker-Hosts hinweg
  • Macvlan – Container mit eigener IP im LAN

In der Praxis nutze ich meistens Bridge-Netzwerke – alles andere kommt nur in speziellen Szenarien zum Einsatz.


Bridge-Netzwerke – mein täglicher Begleiter

Bridge-Netzwerke sind virtuelle Netzwerke auf einem Docker-Host. Sie sind perfekt, wenn mehrere Container miteinander kommunizieren sollen.

Eigenes Bridge-Netzwerk erstellen

docker network create mein_bridge_net

Ich arbeite fast immer mit eigenen Bridge-Netzwerken, weil Docker dort automatisch DNS-Namen für Container bereitstellt.

Praxisbeispiel: Zwei Container im selben Netzwerk

docker run -d --name web --network mein_bridge_net nginx
docker run -d --name app --network mein_bridge_net alpine sleep 1000

Beide Container befinden sich nun im selben Netzwerk. Der Container web kann den Container app direkt über den Namen app erreichen – ganz ohne IP-Adressen.

Das war für mich einer der größten Aha-Momente bei Docker.


Host-Netzwerk – schnell, aber mit Vorsicht

Beim Host-Netzwerk teilt sich der Container das Netzwerk direkt mit dem Host. Es gibt keine Port-Mappings und keine Isolation.

docker run --rm --network host nginx

Ich nutze diesen Modus nur selten – meist für Performance-Tests oder spezielle Monitoring-Tools. Für normale Anwendungen ist mir das zu „nah“ am Host.


Overlay-Netzwerke – wenn mehrere Hosts ins Spiel kommen

Sobald Container über mehrere Docker-Hosts hinweg kommunizieren sollen, komme ich an Overlay-Netzwerken nicht vorbei. Sie werden vor allem in Docker Swarm genutzt.

Swarm initialisieren

docker swarm init

Overlay-Netzwerk erstellen

docker network create --driver overlay --attachable mein_overlay_net

Services im Overlay-Netzwerk starten

docker service create --name web --network mein_overlay_net nginx
docker service create --name app --network mein_overlay_net myapp

Die Services können miteinander sprechen, auch wenn sie auf unterschiedlichen Hosts laufen. Für verteilte Anwendungen ist das essenziell.


Macvlan – Container mit eigener IP im LAN

In manchen Szenarien brauche ich Container, die im lokalen Netzwerk wie eigenständige Geräte erscheinen. Genau dafür nutze ich Macvlan.

docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 macvlan_net

Dieser Modus ist mächtig, aber auch fehleranfällig. Ich setze ihn nur ein, wenn es wirklich notwendig ist – zum Beispiel bei Legacy-Systemen.


Container nachträglich mit Netzwerken verbinden

Ein Detail, das ich anfangs nicht kannte: Container lassen sich auch nachträglich mit Netzwerken verbinden.

docker network connect mein_bridge_net mein_container

Und wieder trennen:

docker network disconnect mein_bridge_net mein_container

Das gibt mir viel Flexibilität beim Debugging.


Meine wichtigsten Learnings aus der Praxis

  • Eigene Bridge-Netzwerke sind fast immer die beste Wahl
  • Container-Namen statt IP-Adressen nutzen
  • Host-Netzwerke nur gezielt einsetzen
  • Overlay-Netzwerke erst dann, wenn mehrere Hosts nötig sind
  • Macvlan nur bei echten Netzwerk-Anforderungen verwenden

Fazit

Docker-Netzwerke waren für mich anfangs ein Stolperstein. Heute gehören sie zu den mächtigsten Werkzeugen in meinem Container-Alltag. Sobald man verstanden hat, welcher Netzwerktyp wofür gedacht ist, lassen sich saubere, stabile und gut wartbare Setups bauen.

Mein wichtigstes Learning: Netzwerke bewusst wählen – nicht einfach den Standard benutzen und hoffen, dass es schon irgendwie funktioniert.

Nach oben scrollen