Einführung
Docker Compose ist ein unverzichtbares Werkzeug für die Verwaltung von Docker-Anwendungen mit mehreren Containern. Dieses Lab führt Sie durch die Behebung des häufigen Fehlers "zsh: command not found: docker-compose", der vielen Benutzern beim Einstieg in Docker Compose begegnet.
Durch die Durchführung dieses Labs lernen Sie, wie Sie Docker Compose richtig installieren, Probleme im Zusammenhang mit Pfaden beheben und Docker Compose verwenden, um eine einfache Anwendung mit mehreren Containern auszuführen. Diese Fähigkeiten sind grundlegend für Entwickler, die mit containerisierten Anwendungen arbeiten.
Docker und Docker Compose verstehen
Bevor wir mit der Fehlerbehebung beginnen, wollen wir verstehen, was Docker Compose ist und warum es im Docker-Ökosystem wichtig ist.
Was ist Docker?
Docker ist eine Plattform, die es Entwicklern ermöglicht, Anwendungen in Containern zu erstellen, zu verpacken und auszuführen. Container sind leichtgewichtige, isolierte Umgebungen, die alles enthalten, was zum Ausführen einer Anwendung benötigt wird – Code, Laufzeitumgebung, Systemwerkzeuge, Bibliotheken und Einstellungen.
Was ist Docker Compose?
Docker Compose ist ein Werkzeug zum Definieren und Ausführen von Docker-Anwendungen mit mehreren Containern. Mit Docker Compose verwenden Sie eine YAML-Datei, um die Services, Netzwerke und Volumes Ihrer Anwendung zu konfigurieren. Anschließend können Sie mit einem einzigen Befehl alle Services aus Ihrer Konfiguration erstellen und starten.
Lassen Sie uns überprüfen, ob Docker richtig auf unserem System installiert ist:
docker --version
Sie sollten eine Ausgabe ähnlich dieser sehen:
Docker version 20.10.21, build baeda1f
Dies bestätigt, dass Docker installiert und einsatzbereit ist. Versuchen wir nun, Docker Compose auszuführen, um zu sehen, ob es installiert ist:
docker-compose --version
Wenn Docker Compose nicht installiert ist, wird der Fehler angezeigt:
zsh: command not found: docker-compose
Diese Fehlermeldung ist der Schwerpunkt unseres Labs – wir werden dieses Problem in den nächsten Schritten beheben.
Warum Docker Compose verwenden?
Docker Compose bietet mehrere Vorteile für die Verwaltung von Anwendungen mit mehreren Containern:
- Vereinfacht die Konfiguration: Definieren Sie Ihren gesamten Anwendungs-Stack in einer einzigen YAML-Datei.
- Gewährleistet Konsistenz: Führen Sie dasselbe Anwendungs-Setup in mehreren Umgebungen aus.
- Verwaltet Abhängigkeiten: Behandeln Sie die Startreihenfolge der Services und die Kommunikation zwischen Containern.
- Verbessert die Produktivität: Sparen Sie Zeit mit einfachen Befehlen zur Verwaltung Ihres gesamten Anwendungslebenszyklus.
Im nächsten Schritt installieren wir Docker Compose und beheben den Fehler "command not found".
Docker Compose installieren
Nachdem wir verstanden haben, was Docker Compose ist, installieren wir es auf unserem System, um den Fehler "command not found" zu beheben.
Docker Compose Binary herunterladen
Der erste Schritt ist das Herunterladen des Docker Compose Binary. Das offizielle Docker Compose Binary ist auf GitHub verfügbar. Wir verwenden den Befehl curl, um es herunterzuladen:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Dieser Befehl lädt das Docker Compose Binary herunter, das zu Ihrer Betriebssystemarchitektur passt, und speichert es unter /usr/local/bin/docker-compose. Die Ausführung des Befehls dauert einen Moment, da die Datei heruntergeladen wird.
Docker Compose ausführbar machen
Nach dem Herunterladen des Binarys müssen wir es ausführbar machen:
sudo chmod +x /usr/local/bin/docker-compose
Dieser Befehl gewährt dem Docker Compose Binary Ausführungsberechtigungen.
Die Installation überprüfen
Lassen Sie uns nun überprüfen, ob Docker Compose korrekt installiert wurde:
docker-compose --version
Sie sollten eine Ausgabe ähnlich dieser sehen:
Docker Compose version v2.17.2
Wenn Sie immer noch den Fehler "command not found" sehen, bedeutet dies, dass das Verzeichnis /usr/local/bin möglicherweise nicht in Ihrem PATH-System enthalten ist. Wir werden dieses Problem im nächsten Schritt angehen.
Die PATH-Variable verstehen
Die PATH-Variable ist eine Umgebungsvariable in Linux, die der Shell mitteilt, in welchen Verzeichnissen nach ausführbaren Dateien gesucht werden soll, wenn Sie einen Befehl ausführen. Um Ihren aktuellen PATH anzuzeigen, führen Sie aus:
echo $PATH
Sie sollten eine Liste von Verzeichnissen sehen, die durch Doppelpunkte (:) getrennt sind. Wenn /usr/local/bin nicht in dieser Liste enthalten ist, könnte dies erklären, warum die Shell den Befehl docker-compose nicht finden kann.
Im nächsten Schritt werden wir alle verbleibenden Probleme beheben, die uns möglicherweise daran hindern, Docker Compose zu verwenden.
Fehlerbehebung des "Command Not Found"-Fehlers
Wenn Sie nach der Installation immer noch den Fehler "zsh: command not found: docker-compose" erhalten, lassen Sie uns einige häufige Ursachen und deren Lösungen untersuchen.
Lösung 1: Einen symbolischen Link erstellen
Eine gängige Lösung ist das Erstellen eines symbolischen Links zum Docker Compose Binary in einem Verzeichnis, das definitiv in Ihrem PATH enthalten ist, wie z.B. /usr/bin:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Dieser Befehl erstellt einen symbolischen Link (Verknüpfung) zum Docker Compose Binary im Verzeichnis /usr/bin, das typischerweise standardmäßig im PATH des Systems enthalten ist.
Versuchen Sie nach dem Erstellen des symbolischen Links, Docker Compose erneut auszuführen:
docker-compose --version
Sie sollten jetzt die Docker Compose Versionsinformationen ohne Fehler sehen.
Lösung 2: Docker Compose Plugin verwenden (Alternative Methode)
In neueren Versionen von Docker ist Compose als Plugin verfügbar. Wenn Sie stattdessen diese Methode bevorzugen, können Sie Folgendes versuchen:
docker compose version
Beachten Sie das Fehlen eines Bindestrichs zwischen docker und compose. Wenn dieser Befehl funktioniert, bedeutet dies, dass Docker Compose als Plugin verfügbar ist und Sie es stattdessen mit dieser Syntax verwenden können.
Lösung 3: Docker Compose zu Ihrem PATH hinzufügen
Wenn Sie Docker Compose an seinem aktuellen Speicherort belassen möchten, der symbolische Link aber nicht funktioniert, können Sie das Verzeichnis manuell zu Ihrem PATH hinzufügen:
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.zshrc
source ~/.zshrc
Dies fügt /usr/local/bin zu Ihrem PATH hinzu und wendet die Änderungen sofort auf Ihre aktuelle Sitzung an.
Überprüfung
Unabhängig davon, welche Lösung Sie verwendet haben, überprüfen Sie, ob Docker Compose jetzt korrekt funktioniert:
docker-compose --version
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Docker Compose version v2.17.2
Nachdem wir Docker Compose erfolgreich installiert und konfiguriert haben, erstellen wir im nächsten Schritt ein einfaches Docker Compose Projekt, um unsere Installation zu testen.
Erstellen eines einfachen Docker Compose Projekts
Nachdem Docker Compose ordnungsgemäß installiert ist und funktioniert, erstellen wir ein einfaches Projekt, um unser Setup zu testen. Wir erstellen eine einfache Webanwendung mit einem Webserver und einer Redis-Datenbank.
Projektverzeichnis erstellen
Erstellen wir zunächst ein dediziertes Verzeichnis für unser Projekt:
mkdir ~/project/docker-compose-test
cd ~/project/docker-compose-test
Eine Docker Compose Datei erstellen
Erstellen wir nun eine Datei docker-compose.yml mit dem Texteditor nano:
nano docker-compose.yml
Kopieren Sie den folgenden Inhalt und fügen Sie ihn in die Datei ein:
version: "3"
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
redis:
image: redis:alpine
Diese Docker Compose Datei definiert zwei Services:
web: Ein Nginx Webserver, der Inhalte aus einem lokalen Verzeichnis bereitstelltredis: Eine Redis-Datenbank zum Caching oder zur Speicherung von Sitzungsdaten
Drücken Sie Ctrl+O gefolgt von Enter, um die Datei zu speichern, und drücken Sie dann Ctrl+X, um nano zu beenden.
HTML-Inhalt erstellen
Erstellen wir eine einfache HTML-Seite, die unser Web-Service bereitstellen soll:
mkdir -p html
nano html/index.html
Kopieren Sie den folgenden Inhalt und fügen Sie ihn in die Datei ein:
<!DOCTYPE html>
<html>
<head>
<title>Docker Compose Test</title>
</head>
<body>
<h1>Hello from Docker Compose!</h1>
<p>If you can see this, your Docker Compose setup is working correctly.</p>
</body>
</html>
Drücken Sie Ctrl+O gefolgt von Enter, um die Datei zu speichern, und drücken Sie dann Ctrl+X, um nano zu beenden.
Das Docker Compose Projekt ausführen
Starten wir nun unser Docker Compose Projekt:
docker-compose up -d
Das Flag -d führt die Container im Hintergrund aus (detached mode). Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Creating network "docker-compose-test_default" with the default driver
Pulling web (nginx:alpine)...
Pulling redis (redis:alpine)...
[...]
Creating docker-compose-test_web_1 ... done
Creating docker-compose-test_redis_1 ... done
Überprüfen, ob die Services ausgeführt werden
Überprüfen wir, ob unsere Services korrekt ausgeführt werden:
docker-compose ps
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Name Command State Ports
------------------------------------------------------------------------------------
docker-compose-test_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
docker-compose-test_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8080->80/tcp
Auf die Webanwendung zugreifen
Sie können jetzt auf die Webanwendung zugreifen, indem Sie einen Webbrowser in der LabEx-Oberfläche öffnen und zu http://localhost:8080 navigieren. Sie sollten die Meldung "Hello from Docker Compose!" sehen.
Alternativ können Sie curl verwenden, um den Webserver über die Befehlszeile zu überprüfen:
curl http://localhost:8080
Sie sollten den zuvor erstellten HTML-Inhalt sehen.
Das Docker Compose Projekt stoppen
Wenn Sie mit dem Testen fertig sind, können Sie das Docker Compose Projekt stoppen:
docker-compose down
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Stopping docker-compose-test_web_1 ... done
Stopping docker-compose-test_redis_1 ... done
Removing docker-compose-test_web_1 ... done
Removing docker-compose-test_redis_1 ... done
Removing network docker-compose-test_default
Herzlichen Glückwunsch! Sie haben Docker Compose erfolgreich installiert, den Fehler "command not found" behoben und Ihr Setup mit einer einfachen Multi-Container-Anwendung getestet.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie man:
- Die Rolle von Docker Compose bei der Verwaltung von Multi-Container-Anwendungen versteht
- Docker Compose auf Ihrem System installiert
- Den Fehler "zsh: command not found: docker-compose" behebt und löst
- Eine einfache Multi-Container-Anwendung mit Docker Compose erstellt und ausführt
Diese Fähigkeiten bieten eine solide Grundlage für die Arbeit mit Docker und Docker Compose. Sie können jetzt Docker Compose sicher verwenden, um komplexe Multi-Container-Anwendungen zu definieren, bereitzustellen und zu verwalten.
Für weiteres Lernen sollten Sie sich mit fortgeschritteneren Docker Compose Funktionen wie Umgebungsvariablen, Netzwerken, Volumes und der Skalierung von Services beschäftigen. Möglicherweise möchten Sie auch mehr über Docker Compose in Produktionsumgebungen erfahren und wie man es in CI/CD-Pipelines integriert.



