Verwendung des docker compose down Befehls zum Stoppen und Entfernen von Ressourcen

DockerDockerBeginner
Jetzt üben

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

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/rmi("Remove Image") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/run -.-> lab-555077{{"Verwendung des docker compose down Befehls zum Stoppen und Entfernen von Ressourcen"}} docker/ps -.-> lab-555077{{"Verwendung des docker compose down Befehls zum Stoppen und Entfernen von Ressourcen"}} docker/stop -.-> lab-555077{{"Verwendung des docker compose down Befehls zum Stoppen und Entfernen von Ressourcen"}} docker/rm -.-> lab-555077{{"Verwendung des docker compose down Befehls zum Stoppen und Entfernen von Ressourcen"}} docker/pull -.-> lab-555077{{"Verwendung des docker compose down Befehls zum Stoppen und Entfernen von Ressourcen"}} docker/rmi -.-> lab-555077{{"Verwendung des docker compose down Befehls zum Stoppen und Entfernen von Ressourcen"}} docker/images -.-> lab-555077{{"Verwendung des docker compose down Befehls zum Stoppen und Entfernen von Ressourcen"}} docker/volume -.-> lab-555077{{"Verwendung des docker compose down Befehls zum Stoppen und Entfernen von Ressourcen"}} docker/network -.-> lab-555077{{"Verwendung des docker compose down Befehls zum Stoppen und Entfernen von Ressourcen"}} end

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 namens web.
      • image: nginx:latest gibt an, dass dieser Dienst das neueste nginx-Image verwendet. Dieses Image wird später heruntergeladen.
      • ports: - "80:80" mappt Port 80 auf dem Host-Rechner auf Port 80 im web-Container.
      • networks: - app-network verbindet den web-Dienst mit dem app-network.
    • redis: definiert einen Dienst namens redis.
      • image: redis:latest gibt an, dass dieser Dienst das neueste redis-Image verwendet. Dieses Image wird später heruntergeladen.
      • networks: - app-network verbindet den redis-Dienst mit dem app-network.
  • networks: definiert die von den Diensten verwendeten Netzwerke.
    • app-network: definiert ein Netzwerk namens app-network.
      • driver: bridge gibt 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.

Dienste mit docker compose up starten

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:

  1. Das app-network gemäß der Definition in der docker-compose.yml-Datei erstellen
  2. Einen Container für den web-Dienst mit dem nginx:latest-Image erstellen
  3. Einen Container für den redis-Dienst mit dem redis:latest-Image erstellen
  4. Beide Container mit dem app-network verbinden
  5. 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.

Standardressourcen mit docker compose down stoppen und entfernen

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:

  1. Die laufenden Container (web und redis) stoppen
  2. Die gestoppten Container entfernen
  3. Das Netzwerk (my-compose-app_app-network) entfernen, das von docker compose up erstellt 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.

Volumes mit docker compose down -v stoppen und entfernen

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.

Images mit docker compose down --rmi all stoppen und entfernen

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.