Effektive Nutzung des Docker Compose Down-Befehls

DockerBeginner
Jetzt üben

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:

  1. Docker Compose installiert 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. Fortgeschrittene 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:
    • 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 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 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.