Docker/Buch/03 Grundlagen/Kommunikation zwischen Containern

Aus Foxwiki
Version vom 11. November 2026, 10:02 Uhr von Dirkwagner (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Kommunikation zwischen mehreren Containern == Für viele Container-Anwendungen gilt: Ein Container kommt selten allein! Sobald aber mehrere Container gleichzeitig ausgeführt werden, stellt sich die Frage, wie sie miteinander kommunizieren. * Das gelingt am einfachsten über ein internes Netzwerk, das Sie mit docker network einrichten. Die in diesem Abschnitt vorgestellten Kommandos zeigen die Kombination von drei Containern mit MariaDB, phpMyAdmin un…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu:Navigation, Suche

Kommunikation zwischen mehreren Containern

Für viele Container-Anwendungen gilt: Ein Container kommt selten allein! Sobald aber mehrere Container gleichzeitig ausgeführt werden, stellt sich die Frage, wie sie miteinander kommunizieren.

  • Das gelingt am einfachsten über ein internes Netzwerk, das Sie mit docker network einrichten.

Die in diesem Abschnitt vorgestellten Kommandos zeigen die Kombination von drei Containern mit MariaDB, phpMyAdmin und WordPress.

  • Die Beispiele funktionieren unverändert auch mit Rootless Docker und mit Podman.

Mehr Komfort mit »compose«

Wir zeigen Ihnen hier das manuelle Einrichten eines Docker-Netzwerks sowie mehrerer Container primär aus didaktischen Gründen.

  • Wir wollen, dass Sie verstehen, wie Docker funktioniert.

In der Praxis ist es wesentlich effizienter, derartige Setups mit den Kommandos docker compose bzw. podman-compose zu bewerkstelligen.

  • Wie Sie dazu vorgehen, lernen Sie in Kapitel 5, »Container-Setups mit compose«.

Privates Docker-Netzwerk einrichten

Das Einrichten eines Docker-Netzwerks ist denkbar einfach:

docker network create testnet

MariaDB

Schon deutlich komplizierter ist der Start des Datenbanksystems.

  • Die Verwendung von MariaDB ist Ihnen ja aus den bisherigen Beispielen prinzipiell vertraut.
  • Diesmal ändern sich aber ein paar Details:

Wir möchten, dass MariaDB beim ersten Start eine leere Datenbank (wp) sowie einen neuen Account (wpuser) samt Passwort anlegt.

  • Auf diesen Account erhalten später phpMyAdmin und WordPress Zugriff.
  • Das MariaDB-Image kümmert sich um die notwendigen Initialisierungsarbeiten, wenn Sie die Variablen MYSQL_DATABASE , MYSQL_USER und MYSQL_PASSWORD mit -e an docker run übergeben.

Für das Beispiel ist es nicht erforderlich, dass das root-Passwort von MariaDB den anderen Containern bekannt ist.

  • Dank -e MYSQL_RANDOM_ROOT_PASSWORD=1 verwendet MariaDB einfach ein zufälliges Passwort.

Neu ist auch die Option --network , die den Container mit dem vorhin erzeugten Netzwerk verbindet.

Somit ergibt sich eine schon etwas komplexere Abfolge von Optionen für den Start des MariaDB-Containers:

docker run -d --name mariadb - test \
-h mariadb - test
--network testnet \
-e MYSQL_RA ND O M _ RO O T _ P AS S W O R D =1 \
-e MYSQL_DA TA B A S E = wp \
-e MYSQL_US ER = wpuser \
-e MYSQL_PA SS W O R D = geheim \
-v myvolume :/ var /lib / mysql \
mariadb


phpMyAdmin


phpMyAdmin ist eine populäre Weboberfläche zur Administration von MariaDB (siehe Abbildung 3.2).

Abbildung 3.2 phpMyAdmin und der MariaDB-Server laufen in zwei voneinander getrennten Containern.

Der Start des entsprechenden Containers gelingt unkompliziert:

docker run -d --name pma \
--network testnet \
-p 8080:80 \
-e PMA_HOST =mariadb - test \
phpmyadm i n / phpmyadmi n

Ein paar Anmerkungen zu den Optionen

Die Option --network verbindet auch diesen Container mit dem privaten Netzwerk dieses Beispiels. -p bewirkt, dass die Weboberfläche (Port 80 im Container) auf dem Host-System unter Port 8080 angesprochen werden kann. Dank der Variablen PMA_HOST weiß der phpMyAdmin-Container, unter welchem Host-Namen der MariaDB-Server im Netzwerk läuft.

  • Docker-Netzwerke kümmern sich automatisch um die netzwerkinterne Namensauflösung, wobei die mit --name angegebenen Namen gelten.

Wie MariaDB wird auch der phpMyAdmin-Container im Hintergrund ausgeführt (Option -d).

  • Um zu testen, ob alles funktioniert, öffnen Sie im Webbrowser Ihres Rechners die Adresse localhost:8080.
  • Sie müssen sich beim Datenbankserver mit dem Accountnamen wpuser und dem Passwort geheim anmelden.
  • Danach können Sie über die Weboberfläche die in den Tabellen enthaltenen Daten abfragen, neue Tabellen einrichten usw.

root-Zugriff in phpMyAdmin

Wenn Sie in phpMyAdmin nicht nur die Datenbank wp, sondern alle Datenbanken von MariaDB sehen wollen, müssen Sie beim Start des MariaDB-Containers wie in den bisherigen Abschnitten ein root-Passwort festlegen.

  • Dann gelingt in php- MyAdmin der Login mit root und dem dazugehörigen Passwort.
  • In diesem Beispiel ist das nicht möglich, weil das root-Passwort wegen der Variablen MYSQL_RANDOM_

ROOT_PASSWORD=1 zufällig bestimmt wurde.

WordPress

Wie lange haben Sie das letzte Mal gebraucht, um auf einem Server WordPress zu installieren? Wenn Sie das regelmäßig machen, vermutlich nur ein paar Minuten – aber beim ersten Mal dauert es oft viel länger, bis das Fundament, das aus Apache, PHP und MySQL oder MariaDB besteht, mit all seinen Zusatzpaketen installiert und konfiguriert ist. Deutlich schneller geht es mit Docker.

  • Einmal vorausgesetzt, dass Sie bereits einen MySQL- oder MariaDB-Container eingerichtet haben, ist zur Inbetriebnahme von WordPress lediglich das folgende, zugegebenermaßen nicht ganz kurze Kommando notwendig:
docker run -d --name wordpress -test \
--network testnet \
-h wordpress - test \
-v wp -html :/ var / www / html / wp - content \
-p 8081:80 \
-e WORDPRES S_ D B _ HO S T = mariadb -test \
-e WORDPRES S_ D B _ US E R = wpuser \
-e WORDPRES S_ D B _ NA M E = wp \
-e WORDPRES S_ D B _ PA S S W O RD = geheim \
wordpres s

Unter der Adresse http://localhost:8081 nehmen Sie die Website nun in Betrieb (siehe Abbildung 3.3).

  • Die Anfangskonfiguration beschränkt sich auf zwei Dialoge: Auf der ersten Seite wählen Sie die gewünschte Sprache aus, auf der zweiten Seite richten Sie den WordPress-Administrator ein.
  • Die oft heikle Konfiguration der Zugangsdaten

des Datenbankservers entfällt: Darum hat sich ein Script des WordPress-Containers bereits gekümmert.

Abbildung 3.3 WordPress komplettiert das Beispiel in einem dritten Container.

Nur zur Erklärung der docker-run-Optionen

-d bewirkt den Start des Containers als Hintergrunddienst. --name gibt dem Container seinen Namen. --network testnet sorgt dafür, dass der WordPress-Container im gleichen Netzwerk wie der MariaDB-Server und phpMyAdmin läuft. -v macht aus /var/www/html/wp-content ein Volume mit dem Namen wp-html.

  • In diesem Verzeichnis werden hochgeladene Bilder, Plugins etc.
  • gespeichert, also alle Daten, die nichts mit der eigentlichen WordPress-Installation zu tun haben.

Der Volume-Name erleichtert die weitere Administration des Containers, z. B. bei Updates oder beim Löschen.

  • Alle hochgeladenen Dateien und Erweiterungen bleiben dabei im Volume erhalten.

Mit -p geben Sie an, unter welchem Port die WordPress-Installation auf dem Docker-Host angesprochen werden kann.

  • Da Port 8080 im vorigen Beispiel schon für phpMyAdmin zum Einsatz kam, haben wir jetzt eben 8081 verwendet.
  • Sofern Sie Docker mit root-Rechten ausführen und auf Ihrem Host-Rechner Port 80 frei ist, können Sie natürlich auch -p 80:80 angeben.

Die Variablen WORDPRESS_DB_HOST , _USER, _PASSWORD und _NAME geben an, unter welchem Host-Namen der MySQL- oder MariaDB-Server läuft, welcher Login-Name und welches Passwort beim Verbindungsaufbau verwendet werden sollen und wie der Name der Datenbank lautet.

  • Diese Datenbank muss bereits existieren. (Im Gegensatz zu früheren Versionen des WordPress-Images wird die Datenbank nicht erzeugt.)

Als Host-Namen müssen Sie den Namen (Option --name) des MariaDB-Containers angeben.

  • Die Loginund Datenbank-Namen müssen mit den Angaben übereinstimmen, die Sie beim Start von MariaDB mit den Optionen MYSQL_USER , MYSQL_PASSWORD und MYSQL_DATABASE verwendet haben.

Weitere Umgebungsvariablen des offiziellen WordPress-Images sind hier dokumentiert:

Docker-Baukasten

Es ist uns an dieser Stelle nur darum gegangen, einfache Beispiele zu präsentieren, die den Einsatz von Docker zeigen.

  • Deutlich mehr Details zur praktischen Nutzung von Webservern (Apache, Nginx), Datenbanksystemen (MariaDB, MySQL etc.), Webapplikationen (WordPress, Joomla, Nextcloud etc.) folgen in Teil II dieses Buchs, in dem wir Ihnen eine Menge Docker-Images vorstellen.
  • Diese Images sind wie ein Baukasten, aus dem Sie Ihre eigenen Applikationen zusammenstellen können.

Container stoppen und neu starten

Wenn Sie die drei Container vorübergehend nicht mehr brauchen, können Sie sie stoppen und dann bei Bedarf wieder neu starten.

  • Erfreulicherweise können Sie an docker stop bzw. docker start mehrere Container-Namen auf einmal übergeben.
docker stop mariadb - test pma wordpress - test
...
docker start mariadb - test pma wordpress - test

Updates

Wenn es von MariaDB, phpMyAdmin und WordPress neue Images gibt, können Sie wie folgt eine Neuinstallation durchführen:

docker stop mariadb - test pma wordpress - test
docker rm   mariadb - test pma wordpress - test
docker pull mariadb
docker pull phpmyadmi n / phpmyadmi n
docker pull wordpress
 docker run -d --name mariadb - test \
-h mariadb - test \
--network testnet \
-v myvolume :/ var /lib / mysql mariadb
docker run -d --name pma --network testnet \
-p 8080:80 \
-e PMA_HOST =mariadb - test \
phpmyadm i n / phpmyadmi n
docker run -d --name wordpress -test \
--network testnet \
-h wordpress - test \
-v wp -html :/ var / www / html / wp - content \
-p 8081:80 \
-e WORDPRES S_ D B _ HO S T = mariadb -test \
-e WORDPRES S_ D B _ US E R = wpuser \
-e WORDPRES S_ D B _ NA M E = wp \
-e WORDPRES S_ D B _ PA S S W O RD = geheim \
wordpres s

Im Vergleich zur Erstinstallation fällt docker run für MariaDB deutlich kürzer aus, weil die vorhandene Datenbank sowie alle Passwörter weitergenutzt werden.

  • Diese Daten befinden sich in myvolume.

Bei phpMyAdmin bleibt docker run unverändert.

  • Erstaunlicherweise gilt dies auch für den Start des WordPress-Containers.
  • Hier hätte man ja annehmen können, dass die Konfigurationsdaten ebenfalls dauerhaft im Volume gespeichert wären.
  • Tatsächlich enthält die entscheidende Konfigurationsdatei wp_config.php aber Code, der die Umgebungsvariablen auswertet.
  • Fehlen die Umgebungsvariablen, scheitert der Verbindungsaufbau zwischen WordPress und dem Datenbankserver.

Dank der Wiederverwendung der Volumes bleiben bei dem Update alle Daten (also die Tabellen der wp-Datenbank, Blog-Beiträge in WordPress etc.) erhalten.

Aufräumen

Wenn Sie sämtliche Komponenten dieses Beispiels löschen wollen, also das Netzwerk sowie die Container, Volumes und Images, dann führen Sie die folgenden Kommandos aus:

docker   stop mariadb - test pma wordpress - test
docker   rm   mariadb - test pma wordpress - test
docker   volume rm myvolume
docker   volume rm wp - html
docker   network rm testnet
docker   image rm mariadb wordpress phpmyadm in / phpmyadm i n