Docker Compose Down Befehl effektiv nutzen

DockerDockerBeginner
Jetzt üben

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

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:

  1. Alle laufenden Container stoppt, die in Ihrer Docker Compose-Datei definiert sind
  2. Alle Container entfernt
  3. 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:

  1. Alle Container stoppen und entfernen
  2. Alle benannten Volumes entfernen
  3. Alle von einem Dienst verwendeten Images entfernen
  4. 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:

  1. Nur Container und Netzwerke entfernen (Volumes und Images beibehalten):

    docker-compose down
  2. Container, Netzwerke und Images entfernen (Volumes beibehalten):

    docker-compose down --rmi all
  3. Container, Netzwerke und Volumes entfernen (Images beibehalten):

    docker-compose down --volumes
  4. Nur 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:

  1. Alle Container auflisten (einschließlich der gestoppten):

    docker ps -a
  2. Alle Netzwerke auflisten:

    docker network ls
  3. Alle Volumes auflisten:

    docker volume ls
  4. Alle Images auflisten:

    docker image ls
  5. Systemweite 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:

  1. Installiert Docker Compose und eine einfache Docker Compose-Umgebung erstellt
  2. Die Grundlagen von docker-compose down gelernt und wie es standardmäßig Container und Netzwerke entfernt
  3. Erweiterte Optionen erkundet wie --volumes, --rmi und --remove-orphans, um genau zu steuern, welche Ressourcen entfernt werden
  4. 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 down entfernt 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.