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.