Einführung
Docker ist ein mächtiges Werkzeug für die Anwendungsbereitstellung, wirkt jedoch anfangs oft komplex. Diese Challenge führt Sie durch die Verknüpfung von Docker-Containern, um eine Multi-Container-Anwendung zu erstellen. Wir starten mit einfachen Beispielen und steigern uns schrittweise bis hin zu einer komplexeren Anwendung. Selbst als Docker-Neuling werden Sie diesen Schritten leicht folgen können. Wir untersuchen, wie Container miteinander kommunizieren können – ein grundlegender Aspekt beim Aufbau robuster Anwendungen mit Docker.
Ein Image mit einem Dockerfile erstellen
Bevor wir Container verknüpfen können, benötigen wir mindestens eine containerisierte Anwendung. In diesem Schritt erstellen Sie ein Dockerfile für Ihr my-app-Image. Dieses Dockerfile definiert die Umgebung und die Anwendung, die innerhalb des Containers ausgeführt werden soll.
Aufgabe
Das Ziel dieses Schrittes ist die Erstellung eines Dockerfiles für Ihr my-app-Image.
Anforderungen
- Docker muss auf Ihrem System installiert sein.
- Sie sollten eine bestehende
my-app-Anwendung haben, die Sie containerisieren möchten.
Beispielergebnis
Erstellen Sie die für die Challenge notwendigen Dateien:
Erstellen Sie eine neue Datei namens
Dockerfileim Pfad/home/labex/project/mit folgendem Inhalt:- Verwenden Sie
python:3.7-slimals Basis-Image. - Setzen Sie das Arbeitsverzeichnis auf
/app. - Kopieren Sie den Inhalt des aktuellen Verzeichnisses in den Container nach
/app. - Installieren Sie die erforderlichen Pakete.
- Geben Sie Port
80für die Außenwelt frei. - Definieren Sie eine Umgebungsvariable (auch wenn wir sie in diesem Beispiel nicht verwenden, behalten Sie die Anweisung bei).
- Führen Sie
app.pybeim Start des Containers aus.
Erstellen Sie eine Datei namens
app.pyin Ihrem Projektverzeichnis/home/labex/project/mit folgendem Inhalt:import os os.system("wssh --address='0.0.0.0' --port=80")Erstellen Sie eine Datei namens
requirements.txtin Ihrem Projektverzeichnis/home/labex/project/mit folgendem Inhalt:webssh==1.6.2labex:project/ $ pwd /home/labex/project labex:project/ $ ll total 12K -rw-r--r-- 1 labex labex 59 Jan 24 15:21 app.py -rw-r--r-- 1 labex labex 163 Jan 24 15:19 Dockerfile -rw-r--r-- 1 labex labex 14 Jan 24 15:21 requirements.txt- Verwenden Sie
Verwenden Sie den Befehl
docker build, um dasmy-app-Image zu erstellen.labex:project/ $ docker images | grep my-app my-app latest 266edf714faf 30 seconds ago 170MBStarten Sie einen neuen Container mit dem
my-app-Image und notieren Sie das Port-Mapping.labex:project/ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11f06f08d2d3 my-app "python app.py" 4 seconds ago Up 4 seconds 0.0.0.0:8080- hopeful_elgamal > 80/tcpÖffnen Sie einen Webbrowser und navigieren Sie zu
http://localhost:8080, um zu überprüfen, ob Ihre Anwendung korrekt läuft.
Zwei Docker-Container verknüpfen
Nachdem wir nun eine containerisierte Anwendung haben, gehen wir zum Verknüpfen von Containern über. In diesem Schritt lernen Sie, wie Sie zwei Docker-Container miteinander verbinden, damit sie miteinander kommunizieren können. Dieser Prozess ist entscheidend für die Erstellung von Multi-Service-Anwendungen innerhalb von Docker.
Aufgabe
Verknüpfen Sie einen Apache-Webserver-Container mit einem MySQL-Datenbank-Container.
Anforderungen
- Sie benötigen zwei Docker-Container: einen mit Apache und einen mit MySQL.
- Docker muss auf Ihrem System installiert sein.
Hinweis
- Denken Sie daran, ein neues Terminal zu öffnen, um diesen Schritt zu starten, damit es nicht zu Konflikten mit Ihrem vorherigen Container kommt.
Beispielergebnis
Zugriff auf MySQL vom Apache-Container aus:
Starten Sie einen Apache-Container namens
my_apachebasierend auf demhttpd-Image und bilden Sie den Host-Port80auf den Container-Port80ab.labex:project/ $ docker ps | grep my_apache a91a93216e84 httpd "httpd-foreground" 52 seconds ago Up 47 seconds 0.0.0.0:80- my_apache > 80/tcpStarten Sie einen MySQL-Container namens
my_mysql, setzen Sie die UmgebungsvariableMYSQL_ROOT_PASSWORDaufpasswordund verwenden Sie dasmysql-Image.labex:project/ $ docker ps | grep mysql 0cb864cf97c6 mysql "docker-entrypoint.s…" 42 seconds ago Up 35 seconds 3306/tcp, 33060/tcp my_mysqlVerknüpfen Sie den Apache-Container mit dem MySQL-Container. Hinweis: Für diesen Schritt wird keine direkte Befehlsausgabe erwartet, aber die Verknüpfung ist in den Umgebungsvariablen des Containers sichtbar. Sie können den Container mit dem Befehl
docker inspect my_apacheuntersuchen.labex:project/ $ docker ps | grep my_app 859c201b7267 my-app "python app.py" 53 seconds ago Up 52 seconds 80/tcp my_appVerwenden Sie den Befehl
docker exec, um vommy_app-Container aus auf die MySQL-Befehlszeilenschnittstelle zuzugreifen (Sie müssen den Befehl anpassen, falls Sie die Verknüpfung anders vorgenommen haben).Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.3.0 MySQL Community Server - GPL Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>
Mehrere Docker-Container verknüpfen und Umgebungsvariablen verwenden
Aufbauend auf dem vorherigen Schritt fügt dieser Teil zwei neue Konzepte hinzu: Ein Anwendungscontainer wird mit beiden Diensten verknüpft, und der Container erhält Verbindungseinstellungen über Umgebungsvariablen. In Schritt 2 haben Sie lediglich nachgewiesen, dass verknüpfte Container einander erreichen können. In diesem Schritt müssen Sie my_app2 mit beiden --link-Optionen sowie den Umgebungsvariablen starten, die die MySQL- und Apache-Hosts beschreiben.
Aufgabe
Starten Sie drei Container: einen mit Apache, einen mit MySQL und einen mit einer benutzerdefinierten Anwendung. Die benutzerdefinierte Anwendung sollte sowohl auf MySQL als auch auf Apache zugreifen können.
Anforderungen
- Sie benötigen drei Docker-Container: Apache, MySQL und eine benutzerdefinierte Anwendung.
- Starten Sie
my_app2mit beiden Verknüpfungen und diesen Umgebungsvariablen:DB_HOST=mysql,DB_USER=root,DB_PASSWORD=passwordundAPACHE_HOST=apache. - Installieren Sie
curlinnerhalb vonmy_app2, bevor Sie die Apache-Verbindung testen, da dasmy-app-Image dies standardmäßig nicht enthält. - Docker muss auf Ihrem System installiert sein.
Beispielergebnis
Starten Sie einen Apache- und einen MySQL-Container wie in Schritt 2 beschrieben.
Starten Sie einen benutzerdefinierten Anwendungscontainer namens
my_app2, der sowohl auf MySQL als auch auf Apache zugreifen kann.labex:project/ $ docker ps | grep app2 8945b42659a6 my-app "python app.py" 15 seconds ago Up 15 seconds 80/tcp my_app2Betreten Sie
my_app2, installieren Siecurlund führen Siecurl http://apache/aus, um zu bestätigen, dass der verknüpfte Apache-Container erreichbar ist.<html> <body> <h1>It works!</h1> </body> </html>
Zusammenfassung
In dieser Challenge haben Sie gelernt, wie man Docker-Container miteinander verknüpft, um Multi-Container-Anwendungen zu erstellen. Wir haben uns von einem einzelnen Container über verknüpfte Paare bis hin zu einem Drei-Container-Setup gesteigert. Sie verstehen nun, wie Sie Container-Links und den Befehl docker exec nutzen können, um die Kommunikation zwischen verschiedenen Diensten zu ermöglichen, was Ihnen den Aufbau komplexerer Anwendungen erlaubt. Experimentieren Sie weiter und haben Sie Spaß dabei!



