Docker - Container Linking
Einführung in das Container-Linking
Hallo, angehende Docker-Enthusiasten! Heute tauchen wir ein in die aufregende Welt des Container-Linkings. Als dein freundlicher Nachbarschafts-Computerlehrer bin ich hier, um dich auf dieser Reise zu führen, selbst wenn du noch nie eine Zeile Code geschrieben hast. Also, schnall dich an und lassen wir auf dem Meer der Container segeln!
Container-Linking ist wie das Vorstellen von zwei Freunden auf einer Party. Es ermöglicht Containern, miteinander zu kommunizieren und Informationen und Ressourcen zu teilen. Stell dir vor, du bist bei einem Buffet (das ist unser Docker-Host), und jedes Gericht (Container) muss wissen, welche anderen Gerichte verfügbar sind. Das ist im Grunde, was wir mit dem Container-Linking machen!
Warum Container-Linking wichtig ist
Du fragst dich vielleicht, "Warum sollte ich mir das Container-Linking ans Herz nehmen?" Nun, lass mich dir eine kleine Geschichte erzählen. Es war einmal, in einem Datenzentrum weit, weit entfernt, lebten Anwendungen in Isolation. Sie konnten nicht miteinander sprechen, Daten teilen oder zusammenarbeiten. Es war ein einsames Dasein. Doch dann kam das Container-Linking und änderte alles!
Container-Linking ermöglicht es uns:
- Komplexe, mehrsätzige Anwendungen zu erstellen
- Daten zwischen Containern zu teilen
- Die Sicherheit zu verbessern, indem Dienstleistungen isoliert werden
- Unsere Anwendungen einfacher zu skalieren
Grundlegendes Container-Linking
Lassen wir mit einem einfachen Beispiel beginnen. Wir erstellen zwei Container: einen Webserver und eine Datenbank, und verknüpfen sie miteinander.
Schritt 1: Erstellen des Datenbank-Containers
Zuerst erstellen wir unseren Datenbank-Container. Wir verwenden MySQL als Beispiel.
docker run -d --name mydb -e MYSQL_ROOT_PASSWORD=secret mysql:latest
Lassen wir das auseinanderbrechen:
-
-d
: Führt den Container im Vordergrund aus -
--name mydb
: Gibt unserem Container einen Namen -
-e MYSQL_ROOT_PASSWORD=secret
: Setzt eine Umgebungsvariablen für das Root-Passwort -
mysql:latest
: Verwendet das neueste MySQL-Image
Schritt 2: Erstellen des Webserver-Containers
Nun erstellen wir unseren Webserver-Container und verknüpfen ihn mit der Datenbank.
docker run -d --name myweb --link mydb:db -p 80:80 nginx:latest
Hier ist, was passiert:
-
--link mydb:db
: Das ist die Magie! Wir verknüpfen unserenmydb
-Container und nennen ihndb
innerhalb unseres Web-Containers -
-p 80:80
: Mapt Port 80 auf dem Host auf Port 80 im Container
Das Verständnis der Verknüpfung
Wenn wir die --link
-Option verwenden, erledigt Docker mehrere Dinge für uns:
- Es fügt einen Eintrag in die
/etc/hosts
-Datei des Web-Containers hinzu - Es setzt Umgebungsvariablen im Web-Container
- Es ermöglicht dem Web-Container, sich mit dem Datenbank-Container zu verbinden
Lassen wir einen Blick in unseren Web-Container werfen, um zu sehen, was passiert:
docker exec -it myweb bash
Sobald drinnen, können wir die /etc/hosts
-Datei überprüfen:
cat /etc/hosts
Du solltest einen Eintrag für den db
-Container mit seiner IP-Adresse sehen.
Umgebungsvariablen
Docker richtet auch Umgebungsvariablen für uns ein. Lassen wir sie auflisten:
env | grep DB_
Du wirst Variablen wie DB_PORT
, DB_NAME
, etc. sehen. Diese machen es einfach für unsere Anwendung, sich mit der Datenbank zu verbinden.
Legacy-Linking vs. Benutzerdefinierte Netzwerke
Nun habe ich ein Geständnis zu machen. Das --link
-Flag, das wir gerade verwendet haben, wird in Docker actually als veraltet angesehen. Es ist wie das Benutzen eines Handys in der Ära der Smartphones – es funktioniert, aber es gibt bessere Optionen.
Der moderne Weg, Container zu verknüpfen, ist die Verwendung von benutzerdefinierten Netzwerken. Sehen wir uns das an:
Schritt 1: Erstellen eines Netzwerks
docker network create mynetwork
Schritt 2: Container im Netzwerk ausführen
docker run -d --name mydb --network mynetwork -e MYSQL_ROOT_PASSWORD=secret mysql:latest
docker run -d --name myweb --network mynetwork -p 80:80 nginx:latest
Jetzt können unsere Container miteinander kommunizieren, indem sie ihre Namen als Hostnamen verwenden, ohne explizites Linking!
Vorteile benutzerdefinierter Netzwerke
Benutzerdefinierte Netzwerke bieten mehrere Vorteile:
- Bessere Isolierung
- Automatische DNS-Auflösung
- Die Fähigkeit, Container jederzeit aus Netzwerken zu verbinden und zu trennen
Praktisches Beispiel: WordPress und MySQL
Lassen wir unser Wissen mit einem realen Beispiel anwenden: das Einrichten von WordPress mit MySQL.
Schritt 1: Erstellen eines Netzwerks
docker network create wordpress-network
Schritt 2: MySQL-Container ausführen
docker run -d --name wordpress-db --network wordpress-network -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpresspassword mysql:5.7
Schritt 3: WordPress-Container ausführen
docker run -d --name wordpress-site --network wordpress-network -e WORDPRESS_DB_HOST=wordpress-db -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpresspassword -e WORDPRESS_DB_NAME=wordpress -p 8080:80 wordpress:latest
Wenn du nun http://localhost:8080
in deinem Browser aufrufst, solltest du die WordPress-Einrichtungseite sehen!
Schlussfolgerung
Glückwunsch! Du hast gerade deine ersten Schritte in die Welt des Container-Linkings unternommen. Wir haben viel Boden coberter, von grundlegendem Linking bis hin zu benutzerdefinierten Netzwerken und haben sogar eine echte WordPress-Seite mit Containern eingerichtet.
Denke daran, dass Container-Linking darum geht, unsere Anwendungen in Harmonie zusammenarbeiten zu lassen. Es ist wie das Dirigieren eines Orchesters – jeder Container ist ein Instrument, und wenn sie richtig verknüpft sind, schaffen sie wundervolle Musik.
Wenn du deine Docker-Reise fortsetzt, experimentiere weiter mit verschiedenen Containern und Netzwerkoptionen. Je mehr du übst, desto wohler wirst du mit diesen Konzepten werden.
Viel Spaß beim Containerisieren, und möge deine Docker-Images stets erfolgreich gebaut werden!
Credits: Image by storyset