Einführung
Der Befehl docker-compose down ist ein essentielles Werkzeug im Docker-Container-Management. Dieses Lab führt Sie durch die effektive Verwendung von docker-compose down, um Docker-Container, Netzwerke, Volumes und Images ordnungsgemäß herunterzufahren und zu bereinigen. Durch die Beherrschung dieses Befehls können Sie eine saubere Docker-Umgebung aufrechterhalten und Ihren Entwicklungsworkflow optimieren.
Installieren von Docker Compose und Erstellen eines Beispielprojekts
Bevor wir den Befehl docker-compose down verwenden können, müssen wir sicherstellen, dass Docker Compose ordnungsgemäß installiert ist, und ein Beispiel-Docker-Compose-Projekt erstellen, mit dem wir arbeiten können.
Überprüfen der Docker Compose-Installation
Lassen Sie uns zunächst überprüfen, ob Docker Compose während der Einrichtung erfolgreich installiert wurde:
docker-compose version
Sie sollten eine ähnliche Ausgabe wie diese sehen:
Docker Compose version v2.18.1
Erstellen einer einfachen Docker Compose-Datei
Erstellen wir nun eine einfache Docker Compose-Datei, die wir in diesem Lab verwenden werden. Wir erstellen eine Datei namens docker-compose.yml im aktuellen Verzeichnis mit einem einfachen Webdienst, der auf Nginx basiert.
Verwenden Sie den Editor nano, 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, indem Sie Ctrl+O, dann Enter drücken, und beenden Sie sie 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 ähnliche Ausgabe wie diese 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üfen der laufenden Container
Überprüfen wir, ob unsere Container laufen:
docker-compose ps
Sie sollten eine Ausgabe sehen, die zeigt, dass beide Dienste aktiv und ausgeführt werden:
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 überprüfen, ob der Nginx-Webserver zugänglich ist, indem Sie curl verwenden:
curl http://localhost:8080
Sie sollten die HTML-Ausgabe der Standard-Nginx-Willkommensseite sehen.
Nachdem unsere Dienste nun aktiv und ausgeführt werden, sind wir bereit, im nächsten Schritt mehr über den Befehl docker-compose down zu erfahren.
Verstehen und Verwenden von Docker Compose Down
Nachdem unsere Docker Compose-Dienste nun ausgeführt werden, wollen wir uns mit dem Befehl docker-compose down befassen und wie man ihn effektiv einsetzt.
Was ist Docker Compose Down?
Der Befehl docker-compose down wird verwendet, um Container, Netzwerke, Volumes und Images, die von docker-compose up erstellt wurden, zu stoppen und zu entfernen. Dieser Befehl ist unerlässlich, um Ressourcen zu bereinigen, wenn Sie sie nicht mehr benötigen oder wenn Sie 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 ähnliche Ausgabe wie diese 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, den es zu verstehen gilt: Volumes bleiben über den Lebenszyklus von Containern hinaus erhalten, um Ihre Daten zu sichern.
Überprüfen, 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, die anzeigt, dass keine Container aus diesem Docker Compose-Projekt ausgeführt werden.
Überprüfen wir, ob die Volumes noch existieren:
docker volume ls | grep docker-compose-demo
Sie sollten sehen, dass die Volumes noch existieren:
local docker-compose-demo_db_data
local docker-compose-demo_web_data
Dieses Standardverhalten ist wichtig, da es Ihre Daten über Container-Neustarts hinweg erhält. Wenn Sie diese Volumes ebenfalls entfernen möchten, müssen 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 Folgendes 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 erweiterte Optionen untersuchen, um genau zu steuern, welche Ressourcen entfernt werden.
Verwenden von Docker Compose Down mit erweiterten 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 untersuchen.
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. wenn Sie eine vollständige Bereinigung durchführen oder 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 ähnliche Ausgabe wie diese 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 dieses Mal auch die Volumes entfernt werden.
Ü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, wenn Sie Ihre Docker Compose-Umgebung herunterfahren. 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 ähnliche Ausgabe wie diese 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
Dieses Mal werden auch die Images entfernt.
Entfernen von Orphan Containern
Manchmal haben Sie möglicherweise Container, die von Docker Compose erstellt wurden, aber nicht mehr in Ihrer aktuellen docker-compose.yml-Datei definiert sind. Diese werden als "Orphan 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 vorherigen Container für den db-Dienst hatten, der nicht ordnungsgemäß gestoppt wurde, würde er jetzt als Orphan betrachtet werden. Wir können solche Orphans 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 wird Folgendes tun:
- Alle Container stoppen und entfernen
- Alle benannten Volumes entfernen
- Alle von einem Dienst verwendeten Images entfernen
- Alle Orphan Container entfernen
Dies ist besonders nützlich, wenn Sie Ihre Umgebung vollständig zurücksetzen oder erhebliche Änderungen an Ihrer Docker Compose-Konfiguration vornehmen möchten.
Erkunden zusätzlicher Optionen
Sie können alle verfügbaren Optionen für den Befehl docker-compose down mit dem Help-Flag anzeigen:
docker-compose down --help
Nehmen Sie sich einen Moment Zeit, um die verfügbaren Optionen und ihre 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
Nachdem Sie nun den Befehl docker-compose down und seine Optionen verstehen, wollen wir einige Best Practices und reale Szenarien für die effektive Verwendung dieses Befehls untersuchen.
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: Verwenden von Umgebungen
In realen Szenarien haben Sie möglicherweise verschiedene Umgebungen wie Entwicklung, Test und Produktion. Docker Compose ermöglicht es Ihnen, verschiedene 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 zum Zusammenführen der Konfigurationen und zum Anwenden der entwicklungsspezifischen Einstellungen.
Um diese Umgebung herunterzufahren, würden Sie Folgendes verwenden:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml down
Best Practice: Verwenden 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 möglicherweise nur bestimmte Ressourcen entfernen. Beispielsweise möchten Sie möglicherweise Ihre Volumes (zur Datenerhaltung) behalten, aber Container, Netzwerke und Images entfernen.
So gehen Sie in verschiedenen Szenarien vor:
Nur Container und Netzwerke entfernen (Volumes und Images beibehalten):
docker-compose downContainer, Netzwerke und Images entfernen (Volumes beibehalten):
docker-compose down --rmi allContainer, Netzwerke und Volumes entfernen (Images beibehalten):
docker-compose down --volumesNur lokale Images entfernen (nicht aus einer Registry gezogen):
docker-compose down --rmi local
Durch die selektive Entfernung von Ressourcen können Sie Ihren Workflow basierend auf Ihren spezifischen Anforderungen optimieren.
Best Practice: Überwachen der Ressourcenauslastung
Vor und nach der Ausführung von docker-compose down ist es oft hilfreich, Ihre Docker-Ressourcenauslastung zu überwachen. Dies kann Ihnen helfen, alle Ressourcen zu identifizieren, die nicht ordnungsgemäß bereinigt werden.
Hier sind einige nützliche Befehle:
Alle Container auflisten (einschließlich der gestoppten):
docker ps -aAlle Netzwerke auflisten:
docker network lsAlle Volumes auflisten:
docker volume lsAlle Images auflisten:
docker image lsSystemweite Informationen abrufen:
docker system df
Versuchen wir den letzten Befehl, um unsere aktuelle Ressourcenauslastung zu sehen:
docker system df
Sie sehen eine Zusammenfassung Ihrer Docker-Ressourcenauslastung, einschließlich der Anzahl der Container, Images, Volumes und der insgesamt genutzten Speichermenge.
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
Dadurch werden alle Container, Netzwerke, Volumes und Images, die mit unserem Docker Compose-Projekt verknüpft sind, gestoppt und entfernt.
Durch Befolgen dieser Best Practices können Sie Ihre Docker-Umgebungen effektiv verwalten und eine optimale Ressourcenauslastung sicherstellen.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie den Befehl docker-compose down effektiv einsetzen, um Ihre Docker-Container und -Ressourcen zu verwalten. Hier ist eine Zusammenfassung dessen, was Sie erreicht haben:
- Installiert Docker Compose und eine einfache Docker Compose-Umgebung erstellt
- Die Grundlagen von
docker-compose downgelernt und wie es standardmäßig Container und Netzwerke entfernt - Erweiterte 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:
- Verwenden von umgebungsspezifischen Konfigurationsdateien
- Erstellen von Bereinigungsskripten
- Selektives Entfernen von Ressourcen
- Überwachen der Ressourcenauslastung
Durch die Beherrschung des Befehls docker-compose down verfügen Sie nun über das Wissen, um eine saubere Docker-Umgebung zu verwalten, Ressourcenlecks zu verhindern und Ihren Entwicklungsworkflow zu optimieren.
Denken Sie an diese wichtigsten Punkte:
- 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 bei Bedarf für eine vollständige Bereinigung
Mit diesen Fähigkeiten sind Sie jetzt besser gerüstet, um Docker Compose-Umgebungen in Ihren Projekten effizient zu verwalten.



