Container mit Link verbinden

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Docker ist ein leistungsstarkes Tool zur Anwendungserstellung, kann aber zunächst komplex erscheinen. In dieser Herausforderung werden Sie durch das Verknüpfen von Docker-Containern geführt, um eine Anwendungssoftware mit mehreren Containern zu erstellen. Wir beginnen mit einfachen Beispielen und steigern uns schrittweise zu einer komplexeren Anwendung. Auch wenn Sie neu zu Docker sind, sollten Sie diese Anleitung leicht zu folgen finden. Wir werden untersuchen, wie Container miteinander kommunizieren, was ein grundlegendes Aspekt der Erstellung robuster Anwendungen mit Docker ist.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/start -.-> lab-49351{{"Container mit Link verbinden"}} docker/exec -.-> lab-49351{{"Container mit Link verbinden"}} docker/images -.-> lab-49351{{"Container mit Link verbinden"}} docker/network -.-> lab-49351{{"Container mit Link verbinden"}} docker/build -.-> lab-49351{{"Container mit Link verbinden"}} end

Ein Image mit Dockerfile erstellen

Bevor wir Container verknüpfen können, müssen wir mindestens eine containerisierte Anwendung haben. In diesem Schritt erstellen Sie eine Dockerfile für Ihr my-app-Image. Diese Dockerfile wird die Umgebung und die Anwendung definieren, die innerhalb des Containers ausgeführt werden soll.

Aufgabe

Das Ziel dieses Schritts ist es, eine Dockerfile für Ihr my-app-Image zu erstellen.

Anforderungen

  • Docker muss auf Ihrem Computer installiert sein.
  • Sie sollten eine vorhandene my-app-Anwendung haben, die Sie containerisieren möchten.

Beispielergebnis

  1. Erstellen Sie die erforderlichen Dateien für die Herausforderung:

    Erstellen Sie eine neue Datei mit dem Namen Dockerfile im Pfad /home/labex/project/ mit dem folgenden Inhalt:

    • Verwenden Sie python:3.7-slim als Basisimage.
    • Setzen Sie das Arbeitsverzeichnis auf /app.
    • Kopieren Sie den Inhalt des aktuellen Verzeichnisses in den Container unter /app.
    • Installieren Sie die erforderlichen Pakete.
    • Öffnen Sie den Port 80 für die Außenwelt.
    • Definieren Sie eine Umgebungsvariable (wir verwenden sie in diesem Beispiel nicht, behalten Sie aber die Anweisung bei).
    • Führen Sie app.py aus, wenn der Container startet.

    Erstellen Sie eine Datei mit dem Namen app.py im Projektverzeichnis /home/labex/project/ mit dem folgenden Inhalt:

    import os
    
    os.system("wssh --address='0.0.0.0' --port=80")

    Erstellen Sie eine Datei mit dem Namen requirements.txt im Projektverzeichnis /home/labex/project/ mit dem folgenden Inhalt:

    webssh==1.6.2
    labex: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
  2. Verwenden Sie den Befehl docker build, um das my-app-Image zu erstellen.

    labex:project/ $ docker images | grep my-app
    my-app latest 266edf714faf 30 seconds ago 170MB
  3. Starten Sie einen neuen Container mit dem my-app-Image und notieren Sie die Portzuordnung.

    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
  4. Öffnen Sie einen Webbrowser und navigieren Sie zu http://localhost:8080, um zu überprüfen, ob Ihre Anwendung richtig läuft.

Web app running in browser
✨ Lösung prüfen und üben

Verknüpfen von zwei Docker-Containern

Jetzt, da wir eine containerisierte Anwendung haben, können wir fortfahren und die Container zu verknüpfen. In diesem Schritt werden wir lernen, wie zwei Docker-Container verknüpft werden, um sie miteinander kommunizieren zu lassen. Dieser Prozess ist entscheidend für die Erstellung von Anwendungen mit mehreren Diensten innerhalb von Docker.

Aufgabe

Verknüpfen Sie einen Apache-Webserver-Container mit einem MySQL-Datenbank-Container.

Anforderungen

  • Sie benötigen zwei Docker-Container: Einen, der Apache ausführt, und einen, der MySQL ausführt.
  • Docker muss auf Ihrem Computer installiert sein.

Tipp

  • Denken Sie daran, einen neuen Terminal zu öffnen, um diesen Schritt zu starten, damit es keine Konflikte mit Ihrem vorherigen Container gibt.

Beispielergebnis

Zugang zu MySQL aus dem Apache-Container:

  1. Starten Sie einen Apache-Container namens my_apache auf der Grundlage des httpd-Images, indem Sie die Host-Port 80 auf den Container-Port 80 abbilden.

    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/tcp
  2. Starten Sie einen MySQL-Container namens my_mysql, legen Sie die Umgebungsvariable MYSQL_ROOT_PASSWORD auf password fest und verwenden Sie das mysql-Image.

    labex:project/ $ docker ps | grep mysql
    0cb864cf97c6 mysql "docker-entrypoint.s…" 42 seconds ago Up 35 seconds 3306/tcp, 33060/tcp my_mysql
  3. Verknüpfen Sie den Apache-Container mit dem MySQL-Container.
    Hinweis: Für diesen Schritt wird keine direkte Befehlsausgabe erwartet, aber die Verknüpfung wird in den Umgebungsvariablen des Containers sichtbar sein. Sie können den Container mit dem Befehl docker inspect my_apache untersuchen

    labex:project/ $ docker ps | grep my_app
    859c201b7267 my-app "python app.py" 53 seconds ago Up 52 seconds 80/tcp my_app
  4. Verwenden Sie den Befehl docker exec, um die MySQL-Befehlszeilenschnittstelle aus dem my_app-Container zu erreichen (Sie müssen den Befehl anpassen, wenn Sie anders verknüpft haben).

    Willkommen bei der MariaDB-Monitoranwendung. Die Befehle enden mit ; oder \g.
    Ihre MySQL-Verbindungs-ID ist 8
    Serverversion: 8.3.0 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab und andere.
    
    Geben Sie 'help;' oder '\h' ein, um Hilfe zu erhalten. Geben Sie '\c' ein, um den aktuellen Eingabebefehl zu löschen.
    
    MySQL [(none)]>
✨ Lösung prüfen und üben

Verknüpfen mehrerer Docker-Container und Verwenden von Umgebungsvariablen

Aufbauend auf dem vorherigen Schritt werden wir jetzt untersuchen, wie mehrere Container verknüpft werden und wie Umgebungsvariablen für die Konfiguration genutzt werden. In diesem Schritt wird gezeigt, wie komplexere und flexiblere multi-Container-Umgebungen erstellt werden.

Aufgabe

Starten Sie drei Container: Einen, der Apache ausführt, einen, der MySQL ausführt, und einen, der eine benutzerdefinierte Anwendung ausführt. 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
  • Docker muss auf Ihrem Computer installiert sein.

Beispielergebnis

  1. Starten Sie einen Apache- und einen MySQL-Container wie in Schritt 2 beschrieben.

  2. Starten Sie einen Container für die benutzerdefinierte Anwendung 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_app2
  3. Verwenden Sie curl, um auf die benutzerdefinierte Anwendung über den Apache-Container zuzugreifen.

    <html>
      <body>
        <h1>Es funktioniert!</h1>
      </body>
    </html>
✨ Lösung prüfen und üben

Zusammenfassung

In dieser Herausforderung haben Sie gelernt, wie Docker-Container miteinander verknüpft werden, um Anwendungen mit mehreren Containern zu erstellen. Wir sind von einem einzelnen Container zu verknüpften Paaren und schließlich zu einer Einrichtung mit drei Containern vorgeschritten. Sie verstehen jetzt, wie Sie Containerverknüpfungen und den Befehl docker exec nutzen, um die Kommunikation zwischen verschiedenen Diensten zu ermöglichen und so komplexere Anwendungen zu bauen. Halten Sie sich weiterhin am Experimentieren und haben Spaß!