© Liashko/Shutterstock.com
Entwickler Magazin
Die Entzauberung des Docker Networks

Docker Network Magic

Jeder, der mit Docker experimentiert, kann mit dieser Linux-Containertechnologie außerordentlich schnell Erfolge erzielen. Der Docker Daemon sorgt im Hintergrund dafür, dass viele notwendige Dinge wie Isolierung der Prozesse, Bereitstellen des Dateisystems, Konfigurationen und das Netzwerk bereits irgendwie geregelt sind. So wundert man sich auch nicht, dass ein neu gebauter Container über Netzwerkzugriff ins Internet verfügt, um zum Beispiel Pakete zu installieren. Der folgende Artikel beschreibt, mit welchen Mitteln diese Magie funktioniert, wie sich Container verbinden lassen und welche Leistungen Docker im Bereich des Netzwerks aktuell bietet.

Peter Roßbach


Der Erfolg bei der Kooperation von Docker-Containern mit dem Netz stellt sich schnell ein. Im Hintergrund zeichnet der Docker Daemon dafür verantwortlich, dass die Verbindungen im Netzwerk hergestellt sind. Die Container können mühelos aus dem Internet Pakete nachladen und untereinander Netzwerkservices nutzen. Das Publizieren von Ports der eigenen Services ist geregelt [1], [2]. Spätestens, wenn die eigene Anwendung in die Produktion soll oder der Zugriff auf verschiedenen Docker Hosts geregelt werden muss, stellt sich die Frage, wie Docker denn die Dienste genau bereitstellt? Die Entzauberung auf der Basis eines Linux-Ubuntu-14.04-Docker-Hosts wird im Folgenden erläutert. Auf der Basis einer Vagrant- und Virtualbox-Installation in Verbindung mit dem Git-Projekt [3] kann die Übung praktisch nachvollzogen werden [4].

Das Netzwerk im Docker-Container

Wenn man in einem einfachen Docker-Container mit dem Befehl docker run -ti --rm ubuntu:14.04 eine Shell startet, kann man sofort überprüfen, welche Netzwerkeinstellungen vorliegen. Im Container ist auf der eth0-Schnittstelle die IP-Adresse 172.17.0.xxx/16 gebunden. Mit dem Befehl ip ro show sieht man alle IP-Pakete, die über die Default-Brücke 172.17.42.1 geroutet werden. Über diese Brücke werden auch alle IP-Pakete nach außen ins Netz bzw. Internet zugestellt (Listing 1).

Listing 1$ sudo docker run -ti —rm ubuntu:14.04 /bin/bashroot@4de56414033f:/# ip addr show1: lo: mtu 1500 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever37: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether e2:47:24:55:de:d4 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::e047:24ff:fe55:ded4/64 scope link valid_lft forever preferred_lft foreverroot@4de56414033f:/# ip ro showdefault via 172.17.42.1 dev ether172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2 root@4de56414033f:/# ping -c 3 www.infrabricks.dePING github.map.fastly.net (185.31.17.133) 56(84) bytes of data.64 bytes from github.map.fastly.net (185.31.17.133): icmp_seq=1 ttl=61 time=46.2 ms64 bytes from github.map.fastly.net (185.31.17.133): icmp_seq=2 ttl=61 time=46.8 ms64 bytes from github.map.fastly.net (185.31....

Entwickler Magazin
Die Entzauberung des Docker Networks

Docker Network Magic

Jeder, der mit Docker experimentiert, kann mit dieser Linux-Containertechnologie außerordentlich schnell Erfolge erzielen. Der Docker Daemon sorgt im Hintergrund dafür, dass viele notwendige Dinge wie Isolierung der Prozesse, Bereitstellen des Dateisystems, Konfigurationen und das Netzwerk bereits irgendwie geregelt sind. So wundert man sich auch nicht, dass ein neu gebauter Container über Netzwerkzugriff ins Internet verfügt, um zum Beispiel Pakete zu installieren. Der folgende Artikel beschreibt, mit welchen Mitteln diese Magie funktioniert, wie sich Container verbinden lassen und welche Leistungen Docker im Bereich des Netzwerks aktuell bietet.

Peter Roßbach


Der Erfolg bei der Kooperation von Docker-Containern mit dem Netz stellt sich schnell ein. Im Hintergrund zeichnet der Docker Daemon dafür verantwortlich, dass die Verbindungen im Netzwerk hergestellt sind. Die Container können mühelos aus dem Internet Pakete nachladen und untereinander Netzwerkservices nutzen. Das Publizieren von Ports der eigenen Services ist geregelt [1], [2]. Spätestens, wenn die eigene Anwendung in die Produktion soll oder der Zugriff auf verschiedenen Docker Hosts geregelt werden muss, stellt sich die Frage, wie Docker denn die Dienste genau bereitstellt? Die Entzauberung auf der Basis eines Linux-Ubuntu-14.04-Docker-Hosts wird im Folgenden erläutert. Auf der Basis einer Vagrant- und Virtualbox-Installation in Verbindung mit dem Git-Projekt [3] kann die Übung praktisch nachvollzogen werden [4].

Das Netzwerk im Docker-Container

Wenn man in einem einfachen Docker-Container mit dem Befehl docker run -ti --rm ubuntu:14.04 eine Shell startet, kann man sofort überprüfen, welche Netzwerkeinstellungen vorliegen. Im Container ist auf der eth0-Schnittstelle die IP-Adresse 172.17.0.xxx/16 gebunden. Mit dem Befehl ip ro show sieht man alle IP-Pakete, die über die Default-Brücke 172.17.42.1 geroutet werden. Über diese Brücke werden auch alle IP-Pakete nach außen ins Netz bzw. Internet zugestellt (Listing 1).

Listing 1$ sudo docker run -ti —rm ubuntu:14.04 /bin/bashroot@4de56414033f:/# ip addr show1: lo: mtu 1500 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever37: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether e2:47:24:55:de:d4 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::e047:24ff:fe55:ded4/64 scope link valid_lft forever preferred_lft foreverroot@4de56414033f:/# ip ro showdefault via 172.17.42.1 dev ether172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2 root@4de56414033f:/# ping -c 3 www.infrabricks.dePING github.map.fastly.net (185.31.17.133) 56(84) bytes of data.64 bytes from github.map.fastly.net (185.31.17.133): icmp_seq=1 ttl=61 time=46.2 ms64 bytes from github.map.fastly.net (185.31.17.133): icmp_seq=2 ttl=61 time=46.8 ms64 bytes from github.map.fastly.net (185.31....

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang