Networking

Du befindest dich hier:

Ein kurzer Exkurs in die Welt der Docker Netzwerke…

Es gibt viele Wege einen Docker-Container über das Netzwerk erreichbar zu machen. Die drei, für meine Tutorials relevanten Möglichkeiten werde ich im Folgenden kurz, und sehr vereinfacht, umreißen. Für detailliertere und tiefer gehende Informationen empfehle ich die offizielle Dokumentation zu Docker.

Der Standard: Netzwerkbrücke

Der Standard in Docker ist die einfache Netzwerkbrücke (Bridged Networking). Dabei wird innerhalb von Docker ein virtuelles Neztwerk erzeugt, in dem der oder die Container mit einer eigenen IP-Adresse, abgeschottet vom physikalischen Heimnetzwerk, kommunizieren können. Um einen Container bzw. einen Dienst der im Container läuft aus dem Heimnetzwerk erreichbar zu machen muss eine Brücke zwischen den Netzwerken erstellt werden. Um eine Brücke zu erstellen, reicht es einen Port vom Heimnetzwerk zum Container durch zu reichen (Stichwort: „EXPOSE“).

Einfaches praktisches Beispiel: Ein Webserver im Container. Der Webserver-Dienst im Container ist im virtuellen Docker-Netzwerk über Port 80 erreichbar. Um ihn aus dem Heimnetzwerk erreichbar zu machen, reichen wir den Port 80 vom Docker-Host (PC/ Server/ DS auf der Docker läuft) zum Container durch. Danach ist der Webserver über die IP-Adresse und den Namen des Docker-Hosts plus Port 80 erreichbar. Der Docker-Host-Port muss dabei nicht zwingend dem Container-Port entsprechen. Man kann ebenso den Host-Port 8080 auf den Container-Port 80 durchreichen. Die Konfiguration dessen erfolgt dabei stets in den Einstellungen des Containers.

Das Einfachste: Selbes Netzwerk wie Host verwenden

Der Weg des geringsten Widerstands ist die Option „Selbes Netzwerk wie Host verwenden“. Dabei wird der Container wie eine Applikation auf dem Docker-Host behandelt und öffnet alle im Container konfigurierten Ports automatisch 1:1 ins Heimnetzwerk. Für den Standard-Anwender eine einfache und unkomplizierte Lösung. Vor allem wenn im Container, wie bei ioBroker, viele verschiedene Ports verwendet werden.

Kleiner Nachteil: Sind die vom Container verwendeten Ports bereits vom Host belegt, kann der Container diese nicht mehr verwenden und die Ausführung schlägt fehl.

Für Fortgeschrittene: MACVLAN-Methode

Um den ioBroker im Heimnetzwerk über eine eigene IP-Adresse, unabhängig vom Docker-Host, ansprechen zu können (ähnlich wie es bei Verwendung eines Raspberry-Images der Fall ist) bleibt nur die Verwendung von MACVLAN. Dabei wird auf die Netzwerkschnittstelle des Docker-Hosts virtuell eine einzelne IP-Adresse oder ein ganzer IP-Adressbereich gelegt und 1:1 an den oder die Container durchgereicht. Die Netzwerkschnittstelle des Docker-Hosts bekommt also zusätzliche virtuelle IP-Adressen verpasst, die unabhängig aus dem Heimnetz angesprochen werden können. Das Durchreichen der Ports entfällt ebenso wie bei Verwendung des Host-Netzwerks.

Trotzdem gibt es einen Wermutstropfen: Eine direkte Kommunikation zwischen der IP-Adresse des ioBrokers und der des Docker-Hosts ist leider nicht möglich. Praktisches Beispiel ist hier z. B. die Anbindung einer auf dem Host laufenden SQL-Datenbank an den ioBroker-Container. In so einem Fall müssen andere Lösungen gefunden werden.

Wie ihr seht ist das Thema Netzwerk unter Docker nicht ganz trivial. Ich empfehle daher jedem sich ausgiebig damit auseinander zu setzen. Nicht alles ist immer möglich. Auch hier gibt es jeweils Vor- und Nachteile….

About the author: André

André
Familienvater und bekennender Technik-Nerd. Beruflich unterwegs als Fachinformatiker für Systemintegration bei einem deutschen IT-Dienstleister. In der Freizeit begeisterter "Home-Automatisierer" bzw. "Smarthome-Bastler" und (zumindest bei schönem Wetter) gerne mit der Familie in verschiedenen Outdooraktivitäten unterwegs.