Docker Teil 2

Netzwerk mit Docker

Standardmässig werden Containers mit der default bridge von Docker konfiguriert.

Default bridge

Wenn eine Session zwischen zwei Containern innerhalb der Default Bridge aufgebaut werden soll, funktioniert dies nur per IP Adresse und nicht per DNS. In den Containern könnte nun mit hosts-files gearbeitet werden, aber das ist eher ungünstig weil je nach Anzahl Containers die IP Adressen nicht mehr stimmen.

User-defined bridges

User-defined bridges provide automatic DNS resolution between containers.

Damit das Netzwerk eines Containers geändert werden kann, muss dieser gestoppt und neu mit Angabe des Netzwerkes (–network) erstellt werden. Danach kann zwischen den Containern mit DNS gearbeitet werden.

Commands

Auflisten der Netzwerke

docker network ls

Erstellen eines benutzerspezifischen Netzwerk

docker network create custom

Auflisten der Netzwerkekonfiguration

docker network inspect custom

Erstellen eines Containers mit benutzerspezifischem Netzwerk

docker run  -e TZ="Europe/Zurich" -it --network custom --hostname pyhost1 --name pyhost1 -d pyhost:1.0.0
docker run  -e TZ="Europe/Zurich" -it --network custom --hostname pyhost2 --name pyhost2 -d pyhost:1.0.0

Testen des Netzwerkes custom

Login auf Container pyhost1:

[37] I ♥ PS 7.1 D:\docker > docker exec -it pyhost1 /bin/bash

Installieren des bind-utils packages, falls nslookup fehlt:

yum install bind-utils

Ausführen von nslookup:

[root@pyhost1 /]# nslookup pyhost2
Server:         127.0.0.11
Address:        127.0.0.11#53

Non-authoritative answer:
Name:   pyhost2
Address: 172.18.0.3

Ausführen von ping:

[root@pyhost1 /]# ping pyhost2
PING pyhost2 (172.18.0.3) 56(84) bytes of data.
64 bytes from pyhost2.custom (172.18.0.3): icmp_seq=1 ttl=64 time=1.51 ms

Praktisches Beispiel

Nachdem mit den Commands docker run -e TZ="Europe/Zurich" -it --network custom --hostname pyhost1 --name pyhost1 -d pyhost:1.0.0 und docker run -e TZ="Europe/Zurich" -it --network custom --hostname pyhost2 --name pyhost2 -d pyhost:1.0.0 zwei Python-Container erstellt haben, können wir ein Client-Server Programm laufen lassen. Ich habe auf meinem GitHub Profile tinuwalther den Code für den Listener (py-listener.py) und Sender (py-sender.py) in Python veröffentlicht mit dem das nachfolgende Beispiel durchgeführt werden kann.

Login

Am Besten kann das Beispiel mit dem Windows Terminal angezeigt werden. Im linken Fenster bin ich auf dem pyhost1 eingeloggt und habe den Listener gestartet und im rechten Fenster bin ich auf dem pyhost2 eingeloggt.

Execute

Nun starte ich im rechten Fenster auf dem pyhost2 den Sender indem ich die Message wetter an den pyhost1 sende. Da ich jetzt das custom Netzwerk bei beiden Containern verwende, kann ich vom Sender aus den Hostnamen als Empfänger angeben anstelle der IP Adresse wenn die default bridge verwendet würde.

Im linken Fenster sehen wir nun, dass eine Message vom pyhost2 mit dem Text wetter empfangen wurde und aufgrund dieses Textes die Meteo-Website von SRF aufgerufen und der Wetterbericht in Markdown heruntergeladen wurde. Mit diesem Python-Programm können noch die Wörter srf und covid verwendet werden um die einsprechenden Websites zu besuchen.

ACHTUNG
Ich habe das Python-Programm angepasst.
Neu kann der Listener mit py-listener.py -s pyhost1 -p 8089 -c 5
und der Sender mit py-sender.py -l pyhost1 -m wettergestartet werden.

References

Docker Documentation docs.docker.oeynet.com, docs.docker.com

Sidebar



Entdecke mehr von Tinus IT Wiki

Jetzt abonnieren, um weiterzulesen und auf das gesamte Archiv zuzugreifen.

Weiterlesen