Einführung
Der Befehl Docker Compose Down ist ein unverzichtbares Werkzeug für die Verwaltung von Docker-Containern. Dieses Lab führt Sie durch die effektive Nutzung von docker-compose down, um Docker-Container, Netzwerke, Volumes und Images ordnungsgemäß zu stoppen und zu bereinigen. Durch die Beherrschung dieses Befehls sind Sie in der Lage, eine saubere Docker-Umgebung aufrechtzuerhalten und Ihren Entwicklungsworkflow zu optimieren.
Installation von Docker Compose und Erstellung eines Beispielprojekts
In diesem Schritt stellen wir sicher, dass Docker Compose korrekt installiert ist, und erstellen ein Beispiel-Docker-Compose-Projekt, mit dem wir arbeiten können.
Überprüfung der Docker Compose-Installation
Überprüfen wir zunächst, ob Docker Compose während des Setups erfolgreich installiert wurde:
docker-compose version
Sie sollten eine Ausgabe ähnlich dieser sehen (die genauen Build-Details können abweichen):
docker-compose version 1.29.2, build unknown
Erstellen einer einfachen Docker Compose-Datei
Lassen Sie uns nun eine einfache Docker Compose-Datei erstellen, die wir während dieses gesamten Labs verwenden werden. Wir erstellen eine Datei namens docker-compose.yml im aktuellen Verzeichnis mit einem grundlegenden Webdienst auf Basis von Nginx.
Verwenden Sie den nano-Editor, um die Datei zu erstellen:
cd ~/project/docker-compose-demo
nano docker-compose.yml
Kopieren Sie den folgenden Inhalt und fügen Sie ihn in den Editor ein:
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- web_data:/usr/share/nginx/html
db:
image: redis:latest
volumes:
- db_data:/data
volumes:
web_data:
db_data:
Speichern Sie die Datei mit Ctrl+O, drücken Sie Enter und beenden Sie den Editor mit Ctrl+X.
Diese Docker Compose-Datei definiert:
- Einen Webdienst, der das Nginx-Image verwendet
- Einen Datenbankdienst, der Redis verwendet
- Zwei benannte Volumes für die persistente Datenspeicherung
Starten der Docker Compose-Dienste
Starten wir die in unserer Docker Compose-Datei definierten Dienste:
docker-compose up -d
Das Flag -d führt die Container im Detached-Modus (im Hintergrund) aus. Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Creating network "docker-compose-demo_default" with the default driver
Creating volume "docker-compose-demo_web_data" with default driver
Creating volume "docker-compose-demo_db_data" with default driver
Creating docker-compose-demo_web_1 ... done
Creating docker-compose-demo_db_1 ... done
Überprüfung der laufenden Container
Überprüfen wir, ob unsere Container laufen:
docker-compose ps
Sie sollten eine Ausgabe sehen, die zeigt, dass beide Dienste aktiv sind:
Name Command State Ports
-----------------------------------------------------------------------------------
docker-compose-demo_db_1 docker-entrypoint.sh redis ... Up 6379/tcp
docker-compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8080->80/tcp
Sie können auch mit curl überprüfen, ob der Nginx-Webserver erreichbar ist:
curl http://localhost:8080
Sie sollten den HTML-Code der Nginx-Standard-Willkommensseite sehen.
Nachdem unsere Dienste nun laufen, sind wir bereit, im nächsten Schritt den Befehl docker-compose down kennenzulernen.
Verständnis und Nutzung von Docker Compose Down
In diesem Schritt, da unsere Docker Compose-Dienste nun laufen, lernen wir den Befehl docker-compose down kennen und wie man ihn effektiv einsetzt.
Was ist Docker Compose Down?
Der Befehl docker-compose down wird verwendet, um Container, Netzwerke, Volumes und Images zu stoppen und zu entfernen, die durch docker-compose up erstellt wurden. Dieser Befehl ist wichtig, um Ressourcen zu bereinigen, wenn Sie sie nicht mehr benötigen oder Ihre Umgebung zurücksetzen möchten.
Grundlegende Verwendung von Docker Compose Down
Die einfachste Form des Befehls lautet:
docker-compose down
Führen wir diesen Befehl aus und beobachten wir, was passiert:
cd ~/project/docker-compose-demo
docker-compose down
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Stopping docker-compose-demo_web_1 ... done
Stopping docker-compose-demo_db_1 ... done
Removing docker-compose-demo_web_1 ... done
Removing docker-compose-demo_db_1 ... done
Removing network docker-compose-demo_default
Beachten Sie, dass der Befehl:
- Alle laufenden Container stoppt, die in Ihrer Docker Compose-Datei definiert sind
- Alle Container entfernt
- Das von Docker Compose erstellte Netzwerk entfernt
Standardmäßig werden jedoch keine Volumes entfernt. Dies ist ein wichtiger Punkt: Volumes bleiben über den Lebenszyklus der Container hinaus bestehen, um Ihre Daten zu bewahren.
Überprüfung, ob die Ressourcen entfernt wurden
Bestätigen wir, dass die Container und das Netzwerk entfernt wurden:
docker-compose ps
Sie sollten eine leere Liste sehen, was darauf hinweist, dass keine laufenden Container aus diesem Docker Compose-Projekt vorhanden sind.
Überprüfen wir, ob die Volumes noch existieren:
docker volume ls | grep docker-compose-demo
Sie sollten sehen, dass die Volumes noch vorhanden sind:
local docker-compose-demo_db_data
local docker-compose-demo_web_data
Dieses Standardverhalten ist wichtig, da es Ihre Daten bei Container-Neustarts schützt. Wenn Sie diese Volumes ebenfalls entfernen möchten, müssten Sie zusätzliche Optionen verwenden, die wir im nächsten Schritt behandeln werden.
Erneutes Starten der Dienste
Starten wir unsere Dienste erneut, da wir sie für den nächsten Schritt benötigen:
docker-compose up -d
Sie sollten sehen:
Creating network "docker-compose-demo_default" with the default driver
Creating docker-compose-demo_web_1 ... done
Creating docker-compose-demo_db_1 ... done
Beachten Sie, dass Docker Compose die Volumes nicht neu erstellen musste, da sie bereits existieren.
Nun verstehen Sie die grundlegende Verwendung von docker-compose down. Im nächsten Schritt werden wir fortgeschrittenere Optionen erkunden, um genau zu steuern, welche Ressourcen entfernt werden.
Verwendung von Docker Compose Down mit fortgeschrittenen Optionen
Der grundlegende Befehl docker-compose down ist nützlich, aber Docker Compose bietet zusätzliche Optionen, um Ihnen mehr Kontrolle darüber zu geben, welche Ressourcen entfernt werden. In diesem Schritt werden wir diese Optionen erkunden.
Entfernen von Volumes
Wie wir im vorherigen Schritt beobachtet haben, entfernt docker-compose down standardmäßig keine Volumes. Dies ist eine Sicherheitsfunktion, um versehentlichen Datenverlust zu verhindern. Es gibt jedoch Zeiten, in denen Sie auch Volumes entfernen möchten, z. B. bei einer vollständigen Bereinigung oder wenn Sie die Daten Ihrer Anwendung zurücksetzen möchten.
Um Volumes zusammen mit Containern und Netzwerken zu entfernen, verwenden Sie das Flag --volumes:
docker-compose down --volumes
Probieren wir es aus:
cd ~/project/docker-compose-demo
docker-compose down --volumes
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Stopping docker-compose-demo_web_1 ... done
Stopping docker-compose-demo_db_1 ... done
Removing docker-compose-demo_web_1 ... done
Removing docker-compose-demo_db_1 ... done
Removing network docker-compose-demo_default
Removing volume docker-compose-demo_web_data
Removing volume docker-compose-demo_db_data
Beachten Sie, dass diesmal auch die Volumes entfernt wurden.
Überprüfen wir, ob die Volumes entfernt wurden:
docker volume ls | grep docker-compose-demo
Sie sollten keine Ausgabe sehen, was bestätigt, dass die Volumes entfernt wurden.
Entfernen von Images
Eine weitere nützliche Option ist das Entfernen von Images beim Herunterfahren Ihrer Docker Compose-Umgebung. Dies kann mit dem Flag --rmi erfolgen, das verschiedene Werte akzeptiert:
--rmi all: Entfernt alle von einem Dienst verwendeten Images--rmi local: Entfernt nur Images, die kein benutzerdefiniertes Tag haben
Starten wir unsere Dienste erneut und verwenden dann das Flag --rmi:
docker-compose up -d
Warten Sie, bis die Dienste gestartet sind, und fahren Sie sie dann mit dem Flag --rmi herunter:
docker-compose down --rmi local
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Stopping docker-compose-demo_web_1 ... done
Stopping docker-compose-demo_db_1 ... done
Removing docker-compose-demo_web_1 ... done
Removing docker-compose-demo_db_1 ... done
Removing network docker-compose-demo_default
Removing image redis:latest
Removing image nginx:latest
Diesmal werden auch die Images entfernt.
Entfernen von verwaisten Containern (Orphan Containers)
Manchmal haben Sie Container, die von Docker Compose erstellt wurden, aber nicht mehr in Ihrer aktuellen docker-compose.yml-Datei definiert sind. Diese werden als "verwaiste Container" bezeichnet.
Um dies zu demonstrieren, ändern wir unsere Docker Compose-Datei, um den db-Dienst zu entfernen:
nano docker-compose.yml
Bearbeiten Sie die Datei, um den db-Dienst und sein Volume zu entfernen:
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- web_data:/usr/share/nginx/html
volumes:
web_data:
Speichern und beenden Sie den Editor (Ctrl+O, Enter, Ctrl+X).
Starten wir nun unsere Dienste erneut mit der aktualisierten Datei:
docker-compose up -d
Wenn wir einen zuvor laufenden Container für den db-Dienst hätten, der nicht ordnungsgemäß gestoppt wurde, würde er jetzt als verwaist betrachtet werden. Wir können solche verwaisten Container mit dem Flag --remove-orphans entfernen:
docker-compose down --remove-orphans
Dies stellt sicher, dass alle Container, die von einer früheren Version Ihrer Docker Compose-Datei erstellt wurden, aber nicht mehr definiert sind, ebenfalls entfernt werden.
Kombinieren von Optionen
Sie können diese Optionen auch für eine vollständige Bereinigung kombinieren:
docker-compose down --volumes --rmi all --remove-orphans
Dieser Befehl bewirkt Folgendes:
- Stoppt und entfernt alle Container
- Entfernt alle benannten Volumes
- Entfernt alle von einem Dienst verwendeten Images
- Entfernt alle verwaisten Container
Dies ist besonders nützlich, wenn Sie Ihre Umgebung vollständig zurücksetzen möchten oder wenn Sie sich darauf vorbereiten, wesentliche Änderungen an Ihrer Docker Compose-Konfiguration vorzunehmen.
Erkunden zusätzlicher Optionen
Sie können alle verfügbaren Optionen für den Befehl docker-compose down mit dem Hilfe-Flag anzeigen:
docker-compose down --help
Nehmen Sie sich einen Moment Zeit, um die verfügbaren Optionen und deren Beschreibungen zu überprüfen.
Nun haben Sie ein gutes Verständnis dafür, wie Sie docker-compose down mit verschiedenen Optionen verwenden können, um zu steuern, welche Ressourcen beim Herunterfahren Ihrer Docker Compose-Umgebung entfernt werden.
Best Practices und reale Szenarien
In diesem Schritt, da Sie nun den Befehl docker-compose down und seine Optionen verstehen, werden wir Best Practices und reale Szenarien für die effektive Nutzung dieses Befehls erkunden.
Erstellen einer komplexeren Docker Compose-Umgebung
Um die reale Nutzung besser zu demonstrieren, erstellen wir eine komplexere Docker Compose-Umgebung. Wir richten eine einfache Webanwendung mit Frontend, Backend und Datenbank ein.
cd ~/project/docker-compose-demo
nano docker-compose.yml
Ersetzen Sie den Inhalt durch:
version: "3"
services:
frontend:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- frontend_data:/usr/share/nginx/html
networks:
- app_network
backend:
image: node:14-alpine
command: sh -c "echo 'Backend service running' && sleep infinity"
volumes:
- backend_data:/app
networks:
- app_network
- db_network
database:
image: postgres:13-alpine
environment:
POSTGRES_PASSWORD: example
POSTGRES_USER: user
POSTGRES_DB: appdb
volumes:
- db_data:/var/lib/postgresql/data
networks:
- db_network
networks:
app_network:
db_network:
volumes:
frontend_data:
backend_data:
db_data:
Speichern und beenden Sie den Editor.
Starten wir diese komplexere Umgebung:
docker-compose up -d
Sie sollten eine Ausgabe sehen, die die Erstellung von Netzwerken, Volumes und Containern für alle drei Dienste zeigt.
Best Practice: Verwendung von Umgebungen
In realen Szenarien haben Sie möglicherweise unterschiedliche Umgebungen wie Entwicklung, Test und Produktion. Docker Compose ermöglicht es Ihnen, unterschiedliche Konfigurationsdateien für verschiedene Umgebungen zu verwenden.
Erstellen Sie eine Datei für die Entwicklungsumgebung:
nano docker-compose.dev.yml
Fügen Sie den folgenden Inhalt hinzu:
version: "3"
services:
frontend:
ports:
- "8081:80"
environment:
NODE_ENV: development
backend:
environment:
NODE_ENV: development
DEBUG: "true"
database:
ports:
- "5432:5432"
Speichern und beenden Sie den Editor.
Um diese Datei in Kombination mit der Basisdatei zu verwenden, können Sie das Flag -f verwenden:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d
Dies führt die Konfigurationen zusammen und wendet die entwicklungsspezifischen Einstellungen an.
Um diese Umgebung herunterzufahren, würden Sie verwenden:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml down
Best Practice: Verwendung eines Bereinigungsskripts
In Continuous Integration/Deployment (CI/CD)-Pipelines oder Entwicklungsworkflows ist es oft nützlich, ein Bereinigungsskript zu haben, das alle Docker-Ressourcen entfernt. Erstellen wir ein einfaches Bereinigungsskript:
nano cleanup.sh
Fügen Sie den folgenden Inhalt hinzu:
#!/bin/bash
echo "Cleaning up Docker environment..."
## Stop and remove containers, networks, volumes, and images
docker-compose down --volumes --rmi all --remove-orphans
## Remove dangling volumes
echo "Removing dangling volumes..."
docker volume prune -f
## Remove dangling images
echo "Removing dangling images..."
docker image prune -f
echo "Cleanup complete!"
Speichern und beenden Sie den Editor.
Machen Sie das Skript ausführbar:
chmod +x cleanup.sh
Jetzt können Sie dieses Skript ausführen, wann immer Sie eine vollständige Bereinigung durchführen müssen:
./cleanup.sh
Best Practice: Selektive Ressourcenentfernung
Manchmal möchten Sie nur bestimmte Ressourcen entfernen. Zum Beispiel möchten Sie vielleicht Ihre Volumes behalten (um Daten zu bewahren), aber Container, Netzwerke und Images entfernen.
Hier ist, wie Sie bei verschiedenen Szenarien vorgehen würden:
Nur Container und Netzwerke entfernen (Volumes und Images behalten):
docker-compose down
Container, Netzwerke und Images entfernen (Volumes behalten):
docker-compose down --rmi all
Container, Netzwerke und Volumes entfernen (Images behalten):
docker-compose down --volumes
Nur lokale Images entfernen (nicht aus einer Registry gepullt):
docker-compose down --rmi local
Durch das selektive Entfernen von Ressourcen können Sie Ihren Workflow basierend auf Ihren spezifischen Anforderungen optimieren.
Best Practice: Überwachung der Ressourcennutzung
Vor und nach dem Ausführen von docker-compose down ist es oft hilfreich, Ihre Docker-Ressourcennutzung zu überwachen. Dies kann Ihnen helfen, Ressourcen zu identifizieren, die nicht ordnungsgemäß bereinigt werden.
Hier sind einige nützliche Befehle:
Alle Container auflisten (einschließlich gestoppter):
docker ps -a
Alle Netzwerke auflisten:
docker network ls
Alle Volumes auflisten:
docker volume ls
Alle Images auflisten:
docker image ls
Systemweite Informationen abrufen:
docker system df
Probieren wir den letzten Befehl aus, um unsere aktuelle Ressourcennutzung zu sehen:
docker system df
Sie sehen eine Zusammenfassung Ihrer Docker-Ressourcennutzung, einschließlich der Anzahl der Container, Images, Volumes und des insgesamt verbrauchten Speicherplatzes.
Herunterfahren unserer komplexen Umgebung
Lassen Sie uns nun unsere komplexe Umgebung herunterfahren und alle zugehörigen Ressourcen entfernen:
docker-compose down --volumes --rmi all --remove-orphans
Dies stoppt und entfernt alle Container, Netzwerke, Volumes und Images, die mit unserem Docker Compose-Projekt verknüpft sind.
Indem Sie diese Best Practices befolgen, können Sie Ihre Docker-Umgebungen effektiv verwalten und eine optimale Ressourcennutzung sicherstellen.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie den Befehl docker-compose down effektiv nutzen, um Ihre Docker-Container und Ressourcen zu verwalten. Hier ist eine Zusammenfassung dessen, was Sie erreicht haben:
- Docker Compose installiert und eine einfache Docker Compose-Umgebung erstellt
- Die Grundlagen von
docker-compose downgelernt und wie es standardmäßig Container und Netzwerke entfernt - Fortgeschrittene Optionen erkundet wie
--volumes,--rmiund--remove-orphans, um genau zu steuern, welche Ressourcen entfernt werden - Best Practices implementiert für die Verwendung von Docker Compose in realen Szenarien, einschließlich:
- Verwendung umgebungsspezifischer Konfigurationsdateien
- Erstellen von Bereinigungsskripten
- Selektives Entfernen von Ressourcen
- Überwachung der Ressourcennutzung
Durch die Beherrschung des Befehls docker-compose down verfügen Sie nun über das Wissen, eine saubere Docker-Umgebung aufrechtzuerhalten, Ressourcenlecks zu verhindern und Ihren Entwicklungsworkflow zu optimieren.
Denken Sie an diese Kernpunkte:
- Der grundlegende Befehl
docker-compose downentfernt Container und Netzwerke, behält aber Volumes bei - Verwenden Sie
--volumes, um Volumes zu entfernen, wenn Sie Ihre Daten zurücksetzen möchten - Verwenden Sie
--rmi, um Images zu entfernen, wenn Sie Speicherplatz freigeben müssen - Verwenden Sie
--remove-orphans, um Container zu bereinigen, die nicht mehr in Ihrer Compose-Datei definiert sind - Kombinieren Sie diese Optionen für eine vollständige Bereinigung bei Bedarf
Mit diesen Fähigkeiten sind Sie nun besser gerüstet, um Docker Compose-Umgebungen in Ihren Projekten effizient zu verwalten.



