Container mit Link verbinden

DockerBeginner
Jetzt üben

Einführung

Docker ist ein mächtiges Tool für das Deployment von Anwendungen, kann aber anfangs komplex wirken. Diese Challenge führt Sie durch den Prozess der Verknüpfung von Docker-Containern, um eine Multi-Container-Anwendung zu erstellen. Wir fangen mit simplen Beispielen an und steigern uns schrittweise zu einem komplexeren Szenario. Selbst wenn Sie gerade erst mit Docker anfangen, wird dieser Leitfaden leicht verständlich sein. Wir untersuchen, wie Container miteinander kommunizieren können – ein grundlegender Aspekt beim Aufbau robuster Anwendungen mit Docker.

Ein Image mit 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 es, ein Dockerfile für Ihr my-app Image zu erstellen.

Anforderungen

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

Beispielergebnis

  1. Erstellen Sie die notwendigen Dateien für die Challenge:

    Erstellen Sie eine neue Datei namens Dockerfile im Pfad /home/labex/project/ mit folgendem Inhalt:

    • Verwenden Sie python:3.7-slim als 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 den Port 80 nach außen frei.
    • Definieren Sie eine Umgebungsvariable (auch wenn wir sie in diesem Beispiel nicht aktiv nutzen, behalten Sie die Anweisung bei).
    • Führen Sie app.py beim Start des Containers aus.

    Erstellen Sie eine Datei namens app.py in 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.txt in Ihrem Projektverzeichnis /home/labex/project/ mit folgendem 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 achten Sie auf 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
  4. Öffnen Sie einen Webbrowser und rufen Sie http://localhost:8080 auf, um zu überprüfen, ob Ihre Anwendung korrekt läuft.

    Web-App läuft im Browser
✨ Lösung prüfen und üben

Zwei Docker-Container verknüpfen

Nachdem wir nun eine containerisierte Anwendung haben, widmen wir uns der Verknüpfung von Containern. In diesem Schritt lernen wir, wie man zwei Docker-Container so verbindet, dass sie miteinander kommunizieren können. Dieser Prozess ist entscheidend für die Erstellung von Multi-Service-Anwendungen in 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:

  1. Starten Sie einen Apache-Container namens my_apache basierend auf dem httpd Image und mappen Sie den Host-Port 80 auf den Container-Port 80.

    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 und setzen Sie die Umgebungsvariable MYSQL_ROOT_PASSWORD auf password, unter Verwendung des mysql Images.

    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 vom my_app Container aus auf das MySQL-Kommandozeilen-Interface zuzugreifen (passen Sie den Befehl an, falls Sie die Verknüpfung anders benannt 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)]>
✨ Lösung prüfen und üben

Mehrere Docker-Container verknüpfen und Umgebungsvariablen nutzen

Aufbauend auf dem vorherigen Schritt werden wir nun untersuchen, wie man mehrere Container verknüpft und Umgebungsvariablen für die Konfiguration nutzt. Dieser Schritt zeigt, wie man komplexere und flexiblere Multi-Container-Umgebungen erstellt.

Aufgabe

Starten Sie drei Container: einen mit Apache, einen mit MySQL und einen mit einer benutzerdefinierten Anwendung. Die benutzerdefinierte Anwendung soll sowohl auf MySQL als auch auf Apache zugreifen können.

Anforderungen

  • Sie benötigen drei Docker-Container: Apache, MySQL und eine eigene Anwendung.
  • Docker muss auf Ihrem System installiert sein.

Beispielergebnis

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

  2. Starten Sie einen benutzerdefinierten Anwendungs-Container 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 über den Apache-Container auf die benutzerdefinierte Anwendung zuzugreifen.

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

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 Setup mit drei Containern gesteigert. Sie haben nun ein Verständnis dafür, wie man Container-Links und den Befehl docker exec nutzt, um die Kommunikation zwischen verschiedenen Diensten zu ermöglichen, was Ihnen den Aufbau komplexerer Anwendungen erlaubt. Experimentieren Sie weiter und viel Spaß dabei!