Einleitung: Docker hat die Art und Weise, wie Anwendungen bereitgestellt und skaliert werden, revolutioniert. Doch eines der mächtigsten Features von Docker ist seine Fähigkeit, mehrere Container innerhalb einer Plattform effektiv miteinander kommunizieren zu lassen. In diesem Tutorial werden wir die Grundlagen der Intra-Plattform Kommunikation zwischen Docker-Containern erläutern und zeigen, wie man eine einfache Umgebung einrichtet, in der Container nahtlos miteinander interagieren können.
Was ist Intra-Plattform Kommunikation? Intra-Plattform Kommunikation beschreibt die Fähigkeit von Containern, die auf derselben Docker-Plattform (oder im selben Netzwerk) laufen, miteinander zu kommunizieren, ohne dass externe Netzwerkkonfigurationen erforderlich sind. Diese Art der Kommunikation ist unerlässlich für das Zusammenspiel von Microservices, die in einer Container-Architektur ausgeführt werden.
Voraussetzungen:
- Grundkenntnisse in Docker
- Docker installiert auf dem Host-System (Docker Installation Guide)
- Ein Texteditor oder eine IDE
- Grundkenntnisse in der Arbeit mit der Kommandozeile
Schritt 1: Ein Docker-Netzwerk erstellen
Damit Container miteinander kommunizieren können, müssen sie im selben Netzwerk laufen. Docker bietet die Möglichkeit, benutzerdefinierte Netzwerke zu erstellen, in denen Container einfach über ihre Namen adressiert werden können.
Führen Sie den folgenden Befehl aus, um ein neues Netzwerk zu erstellen:
docker network create mein-netzwerk
Dies erstellt ein benutzerdefiniertes Bridge-Netzwerk mit dem Namen „mein-netzwerk“. Container, die diesem Netzwerk zugewiesen sind, können sich gegenseitig anhand ihres Namens aufrufen.
Schritt 2: Docker-Container erstellen und dem Netzwerk hinzufügen
Nun erstellen wir zwei einfache Container: einen Webserver und eine Datenbank, die über das Netzwerk miteinander kommunizieren sollen.
Webserver (Nginx) Container:
docker run -d --name webserver --network mein-netzwerk nginx
Dieser Befehl erstellt einen Nginx-Webserver-Container und fügt ihn dem zuvor erstellten „mein-netzwerk“ hinzu.
Datenbank (MySQL) Container:
docker run -d --name datenbank --network mein-netzwerk -e MYSQL_ROOT_PASSWORD=root mysql:5.7
Hiermit erstellen wir einen MySQL-Container, der ebenfalls im „mein-netzwerk“ operiert und ein Root-Passwort „root“ erhält.
Schritt 3: Überprüfung der Kommunikation zwischen Containern
Nun wollen wir testen, ob der Webserver den Datenbank-Container erreichen kann. Wir führen dazu einen Befehl in den Webserver-Container ein, um zu prüfen, ob die Kommunikation funktioniert.
Verwenden Sie docker exec
, um in den Webserver-Container zu wechseln:
docker exec -it webserver bash
Innerhalb des Containers können wir einen einfachen Ping-Test durchführen, um die Erreichbarkeit des Datenbank-Containers zu überprüfen:
ping datenbank
Wenn die Container korrekt verbunden sind, sollten Sie eine Ausgabe sehen, die bestätigt, dass der Datenbank-Container erreicht werden kann.
Schritt 4: Verbindung über Umgebungsvariablen und Service Discovery
In Docker-Containern können Sie leicht Umgebungsvariablen verwenden, um Container dynamisch miteinander zu verbinden. Docker bietet eingebaute Service Discovery, sodass Container innerhalb desselben Netzwerks über ihre Namen angesprochen werden können. Dies ist besonders nützlich in Microservice-Architekturen, in denen mehrere Dienste gleichzeitig ausgeführt werden.
Angenommen, unsere Anwendung möchte eine MySQL-Verbindung herstellen. Sie würde einfach die Umgebungsvariable für die Datenbankverbindung auf den Containernamen setzen:
DATABASE_HOST=datenbank
Schritt 5: Docker Compose für Mehrfach-Container Setups
Docker Compose vereinfacht die Verwaltung mehrerer Container erheblich. Anstatt Container manuell zu erstellen und zu verknüpfen, können Sie dies in einer einfachen docker-compose.yml
-Datei beschreiben.
Hier ist ein Beispiel für eine docker-compose.yml
, die sowohl den Webserver als auch die Datenbank mit einer Netzwerkkonfiguration bereitstellt:
version: '3'
services:
webserver:
image: nginx
networks:
- mein-netzwerk
ports:
- "80:80"
datenbank:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
networks:
- mein-netzwerk
networks:
mein-netzwerk:
driver: bridge
Führen Sie dann folgenden Befehl aus, um beide Container zu starten:
docker-compose up -d
Mit docker-compose
wird das Netzwerk automatisch erstellt, und die Container können über ihre Dienstnamen kommunizieren, wie in der YAML-Datei angegeben.
Fazit
Intra-Plattform Kommunikation ist eine wesentliche Fähigkeit in der modernen Anwendungsentwicklung, insbesondere in Microservice-Architekturen. Docker macht es erstaunlich einfach, Container miteinander kommunizieren zu lassen, indem benutzerdefinierte Netzwerke erstellt und Container direkt miteinander verbunden werden. Mit Werkzeugen wie Docker Compose wird die Verwaltung mehrerer Container sogar noch einfacher.
Docker hat nicht nur die Art und Weise vereinfacht, wie Anwendungen verpackt und ausgeliefert werden, sondern auch die Kommunikation und Zusammenarbeit zwischen verschiedenen Diensten und Microservices erheblich verbessert.