Docker Netzwerk einfach erklärt Teil 1 - Standard Netzwerkbrücke

Es gibt unterschiedlichste Arten wie wir Docker Container miteinander verbinden können um intern oder extern mit einem Container zu kommunizieren und Container zu isolieren. Gewisse Docker-Grundlagen sollten für dieses Tutorial vorhanden sein, jedoch nicht zwingend erforderlich, andernfalls empfehle ich dir meinen Kurs Das große Docker & Linux Enterprise Bootcamp zu besuchen.

Im Beispiel verwende ich eine VirtualBox mit einem frisch Installierten Ubuntu LTS. Du kannst die Beispiele aber auf jeder beliebigen Maschine nachvollziehen oder auf einem angemietetn Server wie z.B. von Netcup.

Die Standard-Docker-Netzwerkbrücke

Diese Anleitung ist begleitend zum Youtube-Video.

Docker Netzwerk einfach erklärt - Die Docker Netzwerkbrücke / Bridge - Teil 1
Dieses Video auf YouTube ansehen.
Mit dem abspielen des Videos stimmst du den Datenschutzrichtlinien (siehe Datenschutz) von Youtube zu.
sudo apt install docker.io

ip a

Docker hat eine neue Virtuelle Brücke docker0 angelegt mit einer internen IP-Adresse 172.17.0.1 unsere Virtuelle Brücke zu den Docker-Containern.

docker network ls

Das listet unsere derzeitigen Docker-Netzwerke auf. Hier sehen wir die Docker-Bridge die wir schon kennengelernt haben. Die beiden anderen host und null sehen wir uns später noch bei den anderen Netzwerkmethoden zu Docker an.

Driver = Netzwerktyp

docker run -itd --rm --name picard busybox

-itd = interaktiver Modus und detached (läuft im Hintergrund)
--rm = Container wird beim Beenden gelöscht
--name = Name des Containers

docker run -itd --rm --name enterprise busybox

docker run -itd --rm --name kirk nginx

docker ps

Bis jetzt haben wir noch keine Netzwerke konfiguriert und haben alles in den Standard-Einstellungen Docker überlassen. Mit jedem Container den wir erstellt haben, legt Docker uns ein Virtuelles Interface an, wie bei einem Netzwerkswitch der sich an die Docker0-Brücke anschließt.

ip a

Hier sehen wir jetzt die ganzen neuen Virtuellen Interfaces die Docker angelegt hat.

bridge link

In Docker läuft auch eine Art DHCP-Server der die IP-Adressen automatisch an die Container vergibt. Diese können wir uns mit der inspect-Option anzeigen lassen.

docker inspect bridge

Hier sehen wir nun unsere drei Container mit der jeweiligen IP-Adresse und Netzwerkinformationen, also auch die Container-DNS, indem sie eine Kopie von /etc/resolv.conf des Host-Systems nutzen.

docker exec -it enterprise sh

ip a

ping 172.17.0.3 (Container enterprise)

ping 172.17.0.4 (Container kirk)

ip route

Zeigt uns an welche Default Gateway wir verwenden. Hier wird die Docker Bridge verwendet, welche ein NAT Masquarade bewerkstelligt, damit wir mit dem Docker Container auch ins Internet kommen.

Wie sieht es nun aus mit unserem Webserver Kirk, dem Nginx Container? Können wir darauf zugreifen?
Webserver nutzen standardmäßig den Port 80 (HTTP) um eine einfache Webseite anzuzeigen. Doch können wir auf diesen Port zugreifen?

Wenn wir das wollen müssen wir den Port an das Netzwerk des Hosts weiterleiten, damit er vom Hostsystem mit der externen IP-Adresse den Port an die Interne IP-Adresse des Containers weitergibt.

Um das zu erreichen müssen wir den Container neu erstellen. Dazu entfernen wir kirk und starten ihn mit speziellen Optionen wieder.

docker stop kirk

docker run -itd -p 80:80 --rm --name kirk nginx

docker ps

Hier sehen wir genau welcher Port von welchem Container weitergeleitet wird.

Webbrowser testen http://172.17.0.1

So können wir mit der Standard-Netzwerkbrücke von Docker arbeiten. Es gibt jedoch noch einige weitere Möglichkeiten wie wir mit Docker-Netzwerken umgehen können um z.B. ein eigenes Netzwerk zu erstellen oder isolierte Netzwerke voneinander zu haben.

Weiter gehts im zweiten Teil mit einer benutzerdefinierten Netzwerkbrücke.

Quelle

Docker - https://docs.docker.com/engine/reference/run/#network-settings