So verwenden Sie Docker Compose mit Host-Netzwerkkonfiguration

DockerDockerBeginner
Jetzt üben

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

Einführung

Dieses Tutorial führt Sie durch die Verwendung von Docker Compose mit einer Host-Netzwerkkonfiguration auf einer LabEx Cloud-VM. Docker Compose ist ein Tool, das Ihnen hilft, mehrere Container zu verwalten – denken Sie an Container als leichte, isolierte Umgebungen, die Anwendungen wie einen Webserver ausführen. Normalerweise isoliert Docker das Netzwerk eines Containers vom Host-Rechner (der VM, auf der Sie arbeiten), aber die Host-Netzwerkoption ermöglicht es dem Container, direkt das Netzwerk des Hosts zu nutzen. Dies ist nützlich, wenn Ihre Anwendung so agieren muss, als würde sie direkt auf dem Host laufen, beispielsweise wenn Sie auf die Ports des Hosts zugreifen möchten, ohne zusätzliche Einstellungen vornehmen zu müssen. Am Ende werden Sie Docker Compose einrichten, einen einfachen Webservice mithilfe des Host-Netzwerks erstellen, bereitstellen und testen. Docker ist in Ihrer LabEx-Umgebung bereits vorinstalliert, aber wir stellen sicher, dass auch Docker Compose einsatzbereit ist.

Dieser Lab erfordert eine Internetverbindung zum Lernen. Daher können nur Pro-Benutzer die VM starten. Upgradeen Sie Ihr Konto auf Pro.

Einrichten von Docker Compose

Bevor Sie sich in die Konfiguration stürzen, stellen Sie sicher, dass Docker Compose auf Ihrer LabEx Cloud-VM verfügbar ist. Während Docker bereits vorinstalliert ist, ist Docker Compose – ein separates Tool zur Verwaltung von Mehr-Container-Setups – möglicherweise nicht. Wir werden es schnell über das Terminal installieren.

Öffnen Sie das Terminal in Ihrer LabEx-VM. Die Eingabeaufforderung sollte /home/labex/project anzeigen – dies ist Ihr Standard-Arbeitsverzeichnis. Führen Sie diese Befehle nacheinander aus:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose-install

Hier ist, was diese Befehle tun:

  • curl: Lädt die Docker Compose-Binary von der offiziellen GitHub-Release-Seite herunter. Die URL verwendet $(uname -s)-$(uname -m), um sich an das System Ihrer VM anzupassen (z. B. Linux-x86_64). Version 2.20.2 ist stabil und weitgehend kompatibel.
  • -o /usr/local/bin/docker-compose: Speichert es in /usr/local/bin, einem Standardverzeichnis für ausführbare Tools. sudo stellt sicher, dass Sie die Berechtigung haben, dort zu schreiben.
  • chmod +x: Macht die Datei ausführbar, sodass Sie sie als Befehl ausführen können. Wiederum gewährt sudo die erforderlichen Rechte.

Um zu bestätigen, dass die Installation erfolgreich war, führen Sie aus:

docker-compose --version

Sie sollten eine Ausgabe wie Docker Compose version v2.20.2 sehen. Wenn Sie die Meldung "Befehl nicht gefunden" erhalten, führen Sie die Befehle erneut sorgfältig aus – überprüfen Sie auf Tippfehler oder Internetprobleme (die VM benötigt Internetzugang, um die Datei herunterzuladen). Dieser Schritt stellt sicher, dass Sie docker-compose in den nächsten Schritten verwenden können.

Erstellen einer Docker Compose-Datei mit Host-Netzwerk

Jetzt, da Docker Compose bereit ist, erstellen wir eine docker-compose.yml-Datei - das ist das Blueprint für das Ausführen eines Webdiensts mit Host-Netzwerk. Wir verwenden nano, einen einfachen und für Einsteiger gut geeigneten Terminal-Texteditor.

Um die Datei zu erstellen und zu bearbeiten, führen Sie die folgenden Schritte aus:

  1. Stellen Sie im Terminal sicher, dass Sie sich im Projektverzeichnis befinden:

    cd /home/labex/project
  2. Erstellen und öffnen Sie die Datei mit nano:

    nano docker-compose.yml
  3. Tippen oder einfügen Sie den folgenden Inhalt in nano:

version: "3"
services:
  web:
    image: nginx:latest
    network_mode: host

Hier ist, was jeder Teil bedeutet:

  • version: "3": Legt das Docker Compose-Dateiformat fest. Version 3 ist ein üblicher Standard, ähnlich wie das Auswählen eines Templates.
  • services: Listet die Container (oder "Services") auf, die ausgeführt werden sollen, ähnlich wie Arbeiter für Ihr Projekt.
  • web: Benennt Ihren Service - Sie können ihn wie Sie möchten nennen, aber "web" eignet sich gut für einen Webserver.
  • image: nginx:latest: Gibt die Software an - Nginx, ein beliebter Webserver, wobei latest die neueste Version aus Docker Hub (einer Container-Imagelibrary) herunterlädt.
  • network_mode: host: Die Schlüssel-Einstellung. Normalerweise gibt Docker den Containern ihr eigenes privates Netzwerk und isoliert sie von der Hostmaschine. Der host-Modus lässt den Container direkt das Netzwerk der VM verwenden, sodass Nginx die Ports der Hostmaschine (wie z. B. 80) ohne zusätzliche Schritte erreichen kann.
  1. Um die Datei in nano zu speichern:
    • Drücken Sie Ctrl + X, um zu beenden
    • Drücken Sie Y, um die Änderungen zu speichern zu bestätigen
    • Drücken Sie Enter, um den Dateinamen zu bestätigen

Die Datei ist jetzt in /home/labex/project gespeichert, und Sie sind für den nächsten Schritt bereit.

Bereitstellen der Docker Compose-Anwendung

Nachdem Sie Ihre docker-compose.yml-Datei erstellt haben, können wir den Nginx-Container bereitstellen – Docker wird ihn basierend auf Ihrer Blaupause starten. Wechseln Sie hierfür zum Terminal.

Führen Sie im Terminal im Verzeichnis /home/labex/project folgenden Befehl aus:

docker-compose up -d

Hier ist, was dieser Befehl macht:

  • docker-compose: Das Tool, das die docker-compose.yml-Datei liest und Ihre Services verwaltet.
  • up: Startet den in der Datei definierten web-Service (Nginx).
  • -d: Führt den Service im Hintergrund aus ("detached"-Modus), sodass Sie weiterhin das Terminal nutzen können.

Docker Compose lädt das nginx:latest-Image von Docker Hub herunter, wenn es noch nicht auf der VM vorhanden ist (Sie sehen möglicherweise Downloadmeldungen), und startet dann den Container. Überprüfen Sie, ob der Container läuft, mit folgendem Befehl:

docker ps

Dieser Befehl listet alle aktiven Container auf. Suchen Sie nach nginx:latest in der Spalte "IMAGE" und "Up" in der Spalte "STATUS" (z. B. "Up 5 seconds"). Sie werden keine Portzuordnungen (wie 0.0.0.0:80->80/tcp) sehen, da network_mode: host die Ports des Hosts direkt nutzt. Wenn nichts angezeigt wird, stellen Sie sicher, dass Sie sich im Verzeichnis /home/labex/project befinden (pwd zum Überprüfen) und führen Sie docker-compose up -d erneut aus.

Testen des Nginx-Services im Host-Netzwerk

Jetzt, da der Container mit Host-Netzwerk ausgeführt wird, testen wir, ob Nginx Webseiten auf Port 80 des Hosts – dem Standard-Webport – bereitstellt.

Führen Sie im Terminal im Verzeichnis /home/labex/project folgenden Befehl aus:

curl localhost:80

Was passiert hier:

  • curl: Lädt Daten von einer Webadresse herunter, ähnlich wie ein Terminal-basierter Browser.
  • localhost:80: Stellt eine Verbindung zur VM selbst (localhost) auf Port 80 her. Mit network_mode: host nutzt der Nginx-Container das Netzwerk des Hosts, sodass sein Port 80 der Port 80 des Hosts ist.

Sie sollten HTML-Code sehen, der mit <!DOCTYPE html> beginnt – die Standard-Willkommensseite von Nginx. Normalerweise isoliert Docker die Netzwerke der Container, was eine Portzuordnung erfordert (z. B. Host-Port 80 auf Container-Port 80). Im Host-Modus entfällt dies, sodass Nginx direkt an Port 80 der VM gebunden werden kann.

Wenn Sie die Meldung "Verbindung abgelehnt" erhalten, überprüfen Sie Schritt 3 – führen Sie docker ps aus, um zu bestätigen, dass der Container "Up" ist. Starten Sie ihn bei Bedarf mit docker-compose up -d neu, oder überprüfen Sie Docker mit sudo service docker status. Da wir keinen Browser verwenden, ist curl hier Ihr Testtool.

Logs untersuchen und aufräumen

Lassen Sie uns die Logs des Containers prüfen, um zu sehen, was im Inneren passiert – eine wichtige Fähigkeit zur Fehlerbehebung – und anschließend den Container entfernen, um aufzuräumen.

Logs prüfen

Führen Sie folgenden Befehl aus:

docker-compose logs web
  • docker-compose logs: Zeigt die Ausgabe Ihrer Services an.
  • web: Zielt auf den web-Service aus der docker-compose.yml-Datei.

Suchen Sie nach Zeilen wie "nginx starting" oder "listening on 0.0.0.0:80". Wenn Sie curl verwendet haben, sehen Sie möglicherweise "GET /" in den Logs. Fehler (z. B. "port 80 failed") würden ebenfalls hier angezeigt werden – nützlich, wenn Nginx abstürzt.

Aufräumen

Führen Sie folgenden Befehl aus:

docker-compose down
  • docker-compose down: Stoppt und entfernt den Container, gibt Port 80 frei und räumt auf.

Überprüfen Sie dies mit:

docker ps

Wenn keine nginx-Zeile angezeigt wird, ist der Container entfernt. Wenn er weiterhin angezeigt wird, führen Sie docker-compose down erneut aus. Die docker-compose.yml-Datei bleibt erhalten, sodass Sie den Container später mit docker-compose up -d erneut starten können. Damit ist der Lebenszyklus abgeschlossen: Einrichtung, Bereitstellung, Test und Entfernung.

Fehlerbehebung und Best Practices

Hier erfahren Sie, wie Sie Probleme bewältigen und Docker Compose sinnvoll nutzen können.

Tipps zur Fehlerbehebung

  • Container startet nicht: Wenn docker ps keine Einträge anzeigt, prüfen Sie docker-compose logs web auf Fehler wie "port in use". Geben Sie Port 80 mit sudo lsof -i :80 und sudo kill <PID> frei und starten Sie dann docker-compose up -d.
  • Keine curl-Antwort: Stellen Sie sicher, dass der Container läuft (docker ps) und Docker gestartet ist (sudo service docker status). Starten Sie entweder docker-compose up -d erneut oder starten Sie Docker mit sudo service docker restart neu.
  • Dateiprobleme: Wenn docker-compose up die Datei nicht finden kann, überprüfen Sie, ob Sie sich im Verzeichnis /home/labex/project befinden (pwd) und ob die docker-compose.yml-Datei existiert (ls).

Best Practices

  • Einschränkung des Host-Netzwerks: Die Verwendung des Host-Netzwerks ist einfach, bietet aber keine Isolation. Dies birgt ein Sicherheitsrisiko, wenn andere Dienste laufen. Verwenden Sie es daher nur in Laborumgebungen und nur in der Produktion, wenn es unbedingt erforderlich ist.
  • Vorabprüfung der Ports: Testen Sie mit sudo netstat -tuln | grep :80 und stellen Sie sicher, dass Port 80 frei ist.
  • Aufbewahrung der Dateien: Speichern Sie die docker-compose.yml-Datei im Verzeichnis /home/labex/project, um sie später wiederverwenden zu können.
  • Überprüfung der Logs: Überprüfen Sie regelmäßig die Logs, um Probleme frühzeitig zu erkennen.

Diese Gewohnheiten machen Ihre Docker-Arbeiten zuverlässig und vermitteln Ihnen Kernkompetenzen.

Zusammenfassung

Sie haben Docker Compose installiert, eine docker-compose.yml-Datei mit Host-Netzwerk erstellt, einen Nginx-Container bereitgestellt, getestet, die Logs überprüft und aufgeräumt. Das Host-Netzwerk ermöglicht es Containern, direkt das Netzwerk des Hosts zu nutzen und umgeht so die Isolation von Docker – ein leistungsstarkes Verfahren. Diese Schritte bilden die Grundlage für die Verwaltung von Docker Compose-Anwendungen und die Fehlerbehebung und bereiten Sie auf größere Projekte vor.