Einführung
In diesem Lab lernen Sie, wie Sie den Befehl docker compose down effektiv nutzen, um Ressourcen zu stoppen und zu entfernen, die in einer Docker Compose-Datei definiert sind. Wir beginnen mit der Vorbereitung einer einfachen Compose-Datei mit zwei Diensten (Services) und einem Netzwerk (Network).
Nach dem Setup werden Sie die Dienste mit docker compose up starten. Der Schwerpunkt des Labs liegt dann auf der Verwendung von docker compose down, um die Standardressourcen zu stoppen und zu entfernen. Anschließend werden die Optionen -v zum Entfernen von Volumes und --rmi all zum Löschen von Images untersucht, um unterschiedliche Stufen der Ressourcenbereinigung zu demonstrieren.
Vorbereitung einer einfachen Compose-Datei mit Diensten und einem Netzwerk
In diesem Schritt bereiten wir eine einfache Compose-Datei vor, die zwei Dienste (Services) und ein Netzwerk (Network) definiert. Bevor wir beginnen, müssen wir Docker Compose installieren, da es in der Umgebung nicht vorinstalliert ist.
Zuerst laden wir die Docker Compose-Binary herunter. Wir verwenden Version 1.29.2, die mit der vorinstallierten Docker-Version kompatibel ist.
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Dieser Befehl lädt die Docker Compose-Binary von der offiziellen GitHub-Releases-Seite herunter und speichert sie unter /usr/local/bin/docker-compose. Die Teile $(uname -s) und $(uname -m) erkennen automatisch Ihr Betriebssystem und die Architektur, um die passende Binary herunterzuladen.
Als nächstes müssen wir ausführbare Berechtigungen für die heruntergeladene Binary setzen, damit wir sie als Befehl ausführen können.
sudo chmod +x /usr/local/bin/docker-compose
Nun überprüfen wir die Installation, indem wir die Docker Compose-Version abfragen.
docker-compose --version
Sie sollten die Versionsinformationen in der Konsole sehen, was bestätigt, dass Docker Compose korrekt installiert wurde.
Nachdem Docker Compose installiert ist, erstellen wir ein Verzeichnis für unser Projekt und wechseln hinein. Wir legen ein Verzeichnis namens my-compose-app im Verzeichnis ~/project an.
mkdir ~/project/my-compose-app
cd ~/project/my-compose-app
In diesem Verzeichnis erstellen wir eine Datei namens docker-compose.yml. Diese Datei definiert unsere Dienste und das Netzwerk. Wir verwenden den Editor nano, um diese Datei zu erstellen und zu bearbeiten.
nano docker-compose.yml
Fügen Sie nun folgenden Inhalt in die docker-compose.yml-Datei ein. Diese Datei definiert zwei Dienste: web und redis, sowie ein Netzwerk namens app-network.
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
networks:
- app-network
redis:
image: redis:latest
networks:
- app-network
networks:
app-network:
driver: bridge
Hier die Erklärung dieser docker-compose.yml-Datei:
version: '3.8'gibt die Docker Compose-Dateiformatversion an.services:definiert die verschiedenen Dienste, die Ihre Anwendung ausmachen.web:definiert einen Dienst namensweb.image: nginx:latestgibt an, dass dieser Dienst das neuestenginx-Image verwendet. Dieses Image wird später heruntergeladen.ports: - "80:80"mappt Port 80 auf dem Host-Rechner auf Port 80 imweb-Container.networks: - app-networkverbindet denweb-Dienst mit demapp-network.
redis:definiert einen Dienst namensredis.image: redis:latestgibt an, dass dieser Dienst das neuesteredis-Image verwendet. Dieses Image wird später heruntergeladen.networks: - app-networkverbindet denredis-Dienst mit demapp-network.
networks:definiert die von den Diensten verwendeten Netzwerke.app-network:definiert ein Netzwerk namensapp-network.driver: bridgegibt an, dass dieses Netzwerk den Standard-Bridge-Treiber verwendet.
Speichern Sie die Datei mit Strg + X, dann Y und anschließend Enter.
Bevor wir die Dienste starten, müssen wir die erforderlichen Docker-Images herunterladen. Wir laden die Images nginx:latest und redis:latest herunter.
docker pull nginx:latest
docker pull redis:latest
Diese Befehle laden die angegebenen Images von Docker Hub auf Ihren lokalen Rechner.
Starten der Dienste mit docker compose up
In diesem Schritt werden wir die in unserer docker-compose.yml-Datei definierten Dienste mit dem Befehl docker compose up starten. Dieser Befehl erstellt, (neu)erstellt, startet und verbindet Container für einen Dienst.
Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-compose-app befinden, wo Sie die docker-compose.yml-Datei erstellt haben.
cd ~/project/my-compose-app
Führen Sie nun folgenden Befehl aus, um die Dienste zu starten. Wir verwenden das Flag -d, um die Container im Detached-Modus auszuführen, was bedeutet, dass sie im Hintergrund laufen und Ihr Terminal nicht blockieren.
docker-compose up -d
Wenn Sie diesen Befehl zum ersten Mal ausführen, wird Docker Compose:
- Das
app-networkgemäß der Definition in derdocker-compose.yml-Datei erstellen - Einen Container für den
web-Dienst mit demnginx:latest-Image erstellen - Einen Container für den
redis-Dienst mit demredis:latest-Image erstellen - Beide Container mit dem
app-networkverbinden - Beide Container starten
Sie sollten eine Ausgabe sehen, die anzeigt, dass das Netzwerk und die Container erstellt und gestartet werden.
Um zu überprüfen, ob die Container laufen, können Sie den Befehl docker ps verwenden.
docker ps
Dieser Befehl listet alle laufenden Container auf. Sie sollten zwei Container sehen - einen für den web-Dienst (basierend auf dem nginx-Image) und einen für den redis-Dienst (basierend auf dem redis-Image). Die Containernamen sind typischerweise mit dem Verzeichnisnamen (my-compose-app in diesem Fall) und dem Dienstnamen präfixiert (z.B. my-compose-app_web_1, my-compose-app_redis_1).
Sie können auch die von Docker Compose erstellten Netzwerke mit dem Befehl docker network ls überprüfen.
docker network ls
Sie sollten ein Netzwerk namens my-compose-app_app-network sehen, das basierend auf der app-network-Definition in Ihrer docker-compose.yml-Datei erstellt wurde.
Da wir Port 80 des web-Dienstes auf Port 80 des Hosts gemappt haben, können Sie die Standard-Nginx-Willkommensseite aufrufen, indem Sie einen Webbrowser öffnen und die IP-Adresse Ihrer LabEx-VM eingeben. Alternativ können Sie curl im Terminal verwenden.
curl localhost
Sie sollten den HTML-Inhalt der Standard-Nginx-Willkommensseite in der Ausgabe sehen. Dies bestätigt, dass der web-Dienst läuft und erreichbar ist.
Stoppen und Entfernen von Standardressourcen mit docker compose down
In diesem Schritt werden wir die mit docker compose up erstellten Container und Netzwerke mit dem Befehl docker compose down stoppen und entfernen. Standardmäßig entfernt docker compose down die Container und das von up erstellte Standardnetzwerk.
Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-compose-app befinden.
cd ~/project/my-compose-app
Führen Sie nun folgenden Befehl aus, um die Dienste zu stoppen und zu entfernen.
docker-compose down
Wenn Sie diesen Befehl ausführen, wird Docker Compose:
- Die laufenden Container (
webundredis) stoppen - Die gestoppten Container entfernen
- Das Netzwerk (
my-compose-app_app-network) entfernen, das vondocker compose uperstellt wurde
Sie sollten eine Ausgabe sehen, die anzeigt, dass die Container und das Netzwerk gestoppt und entfernt werden.
Um zu überprüfen, ob die Container entfernt wurden, können Sie den Befehl docker ps -a verwenden. Das Flag -a zeigt alle Container an, einschließlich der gestoppten.
docker ps -a
In der Ausgabe sollten Sie die Container my-compose-app_web_1 und my-compose-app_redis_1 nicht mehr sehen.
Sie können auch überprüfen, ob das Netzwerk entfernt wurde, indem Sie den Befehl docker network ls verwenden.
docker network ls
Das Netzwerk my-compose-app_app-network sollte nicht mehr in der Ausgabe aufgeführt sein.
Hinweis: docker compose down entfernt standardmäßig keine Volumes oder Images. Wie diese entfernt werden können, werden wir in den nächsten Schritten untersuchen.
Stoppen und Entfernen von Volumes mit docker compose down -v
Im vorherigen Schritt haben wir gesehen, dass docker compose down Container und Netzwerke entfernt, aber keine Volumes. In diesem Schritt lernen wir, wie man mit dem -v-Flag bei docker compose down auch Volumes zusammen mit anderen Ressourcen entfernt.
Zuerst starten wir die Dienste erneut, damit wir Ressourcen zum Entfernen haben. Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-compose-app befinden.
cd ~/project/my-compose-app
Führen Sie den Befehl docker compose up -d aus, um die Dienste im Detached-Modus zu starten.
docker-compose up -d
Dadurch werden die Container und das Netzwerk neu erstellt.
Überprüfen wir nun, ob Volumes erstellt wurden. In unserer docker-compose.yml haben wir keine Volumes explizit definiert. Einige Images wie redis können jedoch standardmäßig anonyme Volumes erstellen, um Daten persistent zu speichern. Wir können vorhandene Volumes mit dem Befehl docker volume ls überprüfen.
docker volume ls
Möglicherweise sehen Sie ein Volume mit einem Namen wie my-compose-app_redisdata (der genaue Name kann je nach Docker-Compose-Version und Konfiguration leicht variieren, wird aber wahrscheinlich mit dem Projektnamen und Dienstnamen präfixiert sein). Dies ist ein anonymes Volume, das vom redis-Container erstellt wurde.
Nun stoppen und entfernen wir die Dienste, das Netzwerk und auch die Volumes mit docker compose down -v.
docker-compose down -v
Das -v-Flag weist Docker Compose an, alle im volumes-Abschnitt der docker-compose.yml-Datei deklarierten Volumes sowie alle anonymen Volumes zu entfernen, die mit Containern verbunden sind.
Sie sollten eine Ausgabe sehen, die anzeigt, dass die Container, das Netzwerk und das Volume gestoppt und entfernt werden.
Um zu überprüfen, ob die Container entfernt wurden, verwenden Sie docker ps -a.
docker ps -a
Die Container web und redis sollten nicht aufgeführt sein.
Um zu überprüfen, ob das Netzwerk entfernt wurde, verwenden Sie docker network ls.
docker network ls
Das Netzwerk my-compose-app_app-network sollte nicht aufgeführt sein.
Abschließend können Sie mit docker volume ls überprüfen, ob das Volume entfernt wurde.
docker volume ls
Das zuvor aufgeführte Volume (z.B. my-compose-app_redisdata) sollte nicht mehr in der Ausgabe erscheinen.
Stoppen und Entfernen von Images mit docker compose down --rmi all
In den vorherigen Schritten haben wir gelernt, wie man Container, Netzwerke und Volumes mit docker compose down stoppt und entfernt. Standardmäßig entfernt docker compose down jedoch nicht die Docker-Images, die zur Erstellung der Container verwendet wurden. In diesem Schritt lernen wir, wie man Images mit dem --rmi all-Flag bei docker compose down entfernt.
Zuerst starten wir die Dienste erneut. Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-compose-app befinden.
cd ~/project/my-compose-app
Führen Sie den Befehl docker compose up -d aus, um die Dienste im Detached-Modus zu starten.
docker-compose up -d
Dadurch werden die Container und das Netzwerk neu erstellt.
Überprüfen wir nun die Docker-Images auf Ihrem System mit dem Befehl docker images.
docker images
Sie sollten die Images nginx und redis aufgelistet sehen, zusammen mit anderen Images, die sich möglicherweise auf Ihrem System befinden.
Nun stoppen und entfernen wir die Dienste, das Netzwerk, Volumes und auch die Images mit docker compose down --rmi all.
docker-compose down --rmi all -v
Wir verwenden erneut das -v-Flag, um sicherzustellen, dass auch Volumes entfernt werden. Das --rmi all-Flag weist Docker Compose an, alle Images zu entfernen, die von Diensten in der docker-compose.yml-Datei verwendet werden, auch wenn sie nicht getaggt sind.
Sie sollten eine Ausgabe sehen, die anzeigt, dass die Container, das Netzwerk, Volumes und Images gestoppt und entfernt werden.
Um zu überprüfen, ob die Container entfernt wurden, verwenden Sie docker ps -a.
docker ps -a
Die Container web und redis sollten nicht aufgeführt sein.
Um zu überprüfen, ob das Netzwerk entfernt wurde, verwenden Sie docker network ls.
docker network ls
Das Netzwerk my-compose-app_app-network sollte nicht aufgeführt sein.
Um zu überprüfen, ob die Volumes entfernt wurden, verwenden Sie docker volume ls.
docker volume ls
Alle mit diesem Projekt verbundenen Volumes sollten nicht aufgeführt sein.
Abschließend können Sie mit docker images überprüfen, ob die Images entfernt wurden.
docker images
Die von den Diensten verwendeten Images nginx und redis sollten nicht mehr in der Ausgabe erscheinen, es sei denn, sie werden von anderen Containern verwendet oder haben andere Tags. docker compose down --rmi all entfernt nur Images, die von keinem anderen Container verwendet werden.
Zusammenfassung
In diesem Lab haben wir gelernt, wie man den Befehl docker compose down verwendet, um in einer Docker Compose-Datei definierte Ressourcen zu stoppen und zu entfernen. Wir begannen mit der Vorbereitung einer einfachen Compose-Datei mit zwei Diensten und einem Netzwerk, was die Installation von Docker Compose und die Erstellung der docker-compose.yml-Datei beinhaltete.
Nach dem Starten der Dienste mit docker compose up haben wir verschiedene Möglichkeiten zur Verwendung von docker compose down untersucht. Zuerst nutzten wir den Basisbefehl, um die Standardressourcen (Container und Netzwerke) zu stoppen und zu entfernen. Anschließend lernten wir, wie man Volumes mit dem -v-Flag entfernt und Images mit dem --rmi all-Flag löscht. Dies demonstriert die Flexibilität des docker compose down-Befehls beim Management des Lebenszyklus unserer Docker Compose-Anwendungen.



