Docker ist eine Technologie zur Software-Containerisierung, die Entwicklern dabei hilft, Anwendungen auf verschiedenen Plattformen – vom Desktop bis zur Cloud– zu erstellen und einzusetzen.

Eine Momentaufnahme – oder Blaupause – des Quellcodes, der Abhängigkeiten und der Werkzeuge, die für die Erstellung einer Anwendung in einem Docker-Container erforderlich sind, wird als Image bezeichnet. Docker-Anwendungen, die persistente Daten benötigen, können sich auf einen Speicher verlassen, der als Volume bezeichnet wird und unabhängig vom zugrunde liegenden Betriebssystem ist.

Eine effektive Organisation von Images, Volumes und Containern ist bei der Verwendung von Docker wichtig. Ungenutzte Inkarnationen dieser Assets können sich ansammeln, wertvollen Speicherplatz beanspruchen und schließlich die Systemleistung beeinträchtigen.

In diesem Artikel werden verschiedene Möglichkeiten zur Aufrechterhaltung der Systemorganisation durch das Löschen von Images (sowohl einzeln als auch alle auf einmal), Volumes und Containern vorgestellt. Wir werden die docker Befehlszeilenschnittstelle (CLI) verwenden, um diese Aufgaben schnell zu erledigen.

So entfernst du Docker-Images

Das Entfernen von veralteten oder unnötigen Images aus Docker ist wichtig, um ein sauberes und organisiertes System zu erhalten. Schauen wir uns an, wie die CLI bestimmte Images zum Entfernen auswählen kann.

Zuerst schauen wir uns die Images in einer Docker-Umgebung mit dem Befehl docker image ls an:

$ docker image ls
REPOSITORY       TAG       IMAGE ID       CREATED              SIZE
my_image         latest    2cbc27836df4   60 seconds ago       7.05MB
<none>           <none>    85b412789704   2 days ago           7.05MB
demo             latest    26d80cd96d69   15 months ago        28.5MB

Die obige Auflistung der Images zeigt die Images my_image und demo, beide mit dem Tag latest. Ein drittes Bild hat weder einen Namen noch ein Tag. In diesem Fall handelt es sich um ein Dangling-Image: ein Image, das derzeit nicht von einem Container verwendet wird. Dieses Dangling-Image ist das Ergebnis eines Rebuilds von my_image (ein häufiges Szenario). Die vorherige Version des Images befindet sich noch im Dateisystem, wird aber nicht mehr verwendet.

Die Auflistung zeigt auch die ersten 12 Zeichen der 64-stelligen ID jedes Images, das Erstellungsdatum und den Speicherplatz, den die Images belegen.

Alle unbenutzten Bilder entfernen

In der obigen Liste haben wir ein unbenutztes Bild. Es ist jedoch möglich, dass ein Bild ohne Namen oder Tag aktiv ist. Es könnte z. B. zum Starten eines Containers verwendet worden sein, indem man auf seine ID verweist.

Um alle Bilder, die wirklich hängen, sicher zu löschen, kannst du den Befehl docker image prune verwenden:

$ docker image prune

WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y

Deleted Images:
deleted: sha256:85b412789704c17e9c5e7edc97b2f64c748bbdae7eaa44d3fe2cc21a87acad3d

Total reclaimed space: 7.05MB

Wir werden unsere Bilder noch einmal auflisten, um das Ergebnis unserer Arbeit zu sehen:

$ docker image ls
REPOSITORY       TAG       IMAGE ID       CREATED              SIZE
my_image         latest    2cbc27836df4   70 seconds ago       7.05MB
demo             latest    26d80cd96d69   15 months ago        28.5MB

Nach dem Befehl ist das Bild ohne Namen oder Tag verschwunden.

Ein bestimmtes Bild nach Name entfernen

Du kannst ein Bild zum Entfernen auswählen, indem du seinen Namen angibst:

$ docker image rm <image_name>

Hinweis: Images, die noch in Gebrauch sind, kannst du nicht einfach entfernen. Du solltest die laufenden Container stoppen oder entfernen, die die Images verwenden. Auch wenn es normalerweise nicht empfohlen wird, kannst du die Entfernung eines aktiven Images mit dem Flag -f erzwingen:

$ docker image rm <image_name> -f

Die Abkürzung rmi zum Entfernen von Images verwenden

Das Docker CLI bietet mit dem Alias rmi eine Kurzform für das Entfernen von Images. Wenn du damit ein Image nach Namen entfernst, sieht das folgendermaßen aus:

$ docker rmi demo
Untagged: demo:latest
Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4

Wir verwenden rmi für die folgenden Beispiele zum Entfernen von Images.

Alle nicht markierten Bilder entfernen

Nicht gekennzeichnete Bilder belegen immer noch wertvollen Speicherplatz auf der Festplatte, was dein System mit der Zeit immer mehr verlangsamt.

Um alle nicht markierten Abbilder in Docker zu entfernen, verwende den Befehl docker rmi mit einem Filter. Mit der Option -f kannst du nach bestimmten Kriterien filtern (nicht zu verwechseln mit dem -f Flag, das für image rm verfügbar ist, um eine Aktion zu erzwingen).

Der Filter dangling=true wird verwendet, um nicht markierte Bilder zu identifizieren:

$ docker rmi $(docker images -f "dangling=true" -q)

Die Option -q im obigen Befehl zeigt die Bild-IDs aller nicht markierten Bilder an. Alle diese IDs werden dann als Argumente an docker rmi übergeben, um sie zu entfernen.

Dieser Filter verwendet das Schlüsselwort „dangling“, aber wie oben erwähnt, können einige Bilder ohne Tags tatsächlich aktiv sein. Du wirst gewarnt, wenn ein Bild, das mit diesem Filter ausgewählt wurde, nicht wirklich „baumelt“.

Ein bestimmtes Bild nach ID entfernen

Du kannst den Befehl docker rmi verwenden, um ein bestimmtes Bild anhand seiner ID zu entfernen:

$ docker rmi <image_id>

Ein bestimmtes Bild nach Name und Tag entfernen

Mit dem Befehl docker rmi kannst du ein bestimmtes Bild mitsamt seinem Namen und seiner Kennzeichnung löschen.

Wenn du zum Beispiel mehrere Bilder mit demselben Namen, aber unterschiedlichen Tags hast, kannst du ein bestimmtes Bild mit diesem Format löschen:

$ docker rmi <image_name>:<tag>

Diese Methode ist praktisch, wenn du eine bestimmte Version eines Bildes löschen willst, anstatt alle Bilder eines Repositorys zu löschen.

Alle Bilder mit dem neuesten Tag entfernen

In Docker bezieht sich das „latest“-Tag auf die neueste Version eines bestimmten Docker-Images. Das latest-Tag wird oft als Standard-Tag für Docker-Images verwendet. Es wird automatisch dem neuesten Build eines Images zugewiesen, wenn nicht ausdrücklich ein anderes Tag angegeben wird.

Docker stellt einen Befehl bereit, um alle Images mit dem „latest“-Tag zu entfernen:

$ docker rmi $(docker images | grep "latest" | awk '{print $3}')

Der obige Befehl ist in 2 Teile unterteilt. Zuerst wird die Liste der Image-IDs abgerufen, und dann wird diese Liste als Argument an den Befehl docker rmi übergeben.

Bilder aus einem remote Repository löschen

Um ein Image aus einem remote Repository, wie z. B. Docker Hub, zu entfernen, musst du dich zunächst über die Docker CLI in das Konto einloggen.

Sobald du eingeloggt bist, musst du nur noch den Befehl docker rmi verwenden, um das Image zu entfernen. Mit dem Befehl docker rmi können sowohl lokale als auch remote Bilder entfernt werden:

docker rmi my_repo/my_image_tag

Allerdings kannst du nur Images entfernen, die in das Repository gepusht wurden. Ebenso kannst du keine Bilder entfernen, die von laufenden Containern verwendet werden.

Mehrere Bilder aus einem remoten Repository entfernen

Um mehrere Images aus einem remoten Repository zu entfernen, kannst du den Befehl docker rmi gefolgt von den Image-IDs oder Tags verwenden. Zum Beispiel:

docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3

Damit werden die drei Images mit den Tags image_tag_1, image_tag_2 und image_tag_3 aus dem Repository my_repo entfernt.

So entfernst du Docker-Volumes

Docker-Volumes können viel Speicherplatz beanspruchen, besonders wenn sie große Datenmengen oder mehrere Backups enthalten. Indem du Volumes entfernst, die nicht mehr benötigt werden, reduzierst du das Risiko von Datenschutzverletzungen und stellst sicher, dass sensible Daten nicht für unbefugte Nutzer/innen zugänglich sind. Durch regelmäßiges Entfernen von Volumes kannst du außerdem die Docker-Umgebung auf dem neuesten Stand halten und Probleme durch veraltete Daten verhindern.

Diese Befehle zerstören dauerhaft alle in einem Volume gespeicherten Daten, daher solltest du sie mit Vorsicht verwenden.

Alle unbenutzten Volumes entfernen

In Docker ist das Entfernen ungenutzter Volumes genauso wichtig wie das Entfernen von Bildern oder Containern.

Um Speicherplatz freizugeben, kannst du den Befehl docker volume prune verwenden.

Ein bestimmtes Volume nach Name entfernen

Das Entfernen eines bestimmten Volumes in Docker ist nützlich, um ungenutzte Volumes zu entfernen. Hier ist der Befehl zum Entfernen eines Volumes:

docker volume rm my_volume_name

Mit dem obigen Befehl wird das Volume my_volume_name entfernt. Docker gibt einen Fehler aus, wenn du versuchst, ein benutztes Volume zu entfernen. Du kannst die verfügbaren Volumes mit dem Befehl docker volume ls überprüfen.

So entfernst du Docker-Container

Wenn du mehr mit Docker arbeitest, kann es sein, dass sich viele ungenutzte Container ansammeln, die Festplattenressourcen beanspruchen. Wenn du sie nicht löschst, können sie sich im Laufe der Zeit ansammeln und wertvolle Festplattenressourcen belegen, was dein System verlangsamt und dich möglicherweise gefährdet.

Alle gestoppten Container entfernen

Mit dem Befehl docker container prune kannst du alle gestoppten Container in Docker löschen. Dabei erstellt der Befehl eine Liste aller gestoppten Container, die entfernt werden sollen, und fragt nach einer Bestätigung, bevor er fortfährt. So kannst du Speicherplatz zurückgewinnen und eine saubere und organisierte Docker-Umgebung aufrechterhalten, während du gleichzeitig sicherstellen kannst, dass nichts Wichtiges verloren geht:

$ docker container prune

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

Deleted Containers:
4df4c47c4df4
d35bcec20bce

Beachte, dass mit diesem Befehl nur gestoppte Container entfernt werden können. Wenn du laufende Container entfernen willst, musst du sie zuerst stoppen oder einen anderen Befehl verwenden.

Einen bestimmten Container nach ID entfernen

In Docker kannst du einen bestimmten Container nach seiner ID entfernen, indem du die docker rm command zusammen mit der Container-ID verwendest. Erhalte zunächst alle Container-IDs mit dem Befehl docker ps command:

$ docker ps -a -q
1ce3cdeb4035
06b79541e25c
fa98f1804e3e

$ docker rm 1ce3cdeb4035

Der obige Befehl funktioniert nur, wenn der Container angehalten ist. Wenn der Container in Betrieb ist, musst du ihn mit dem Flag -f zwangsweise entfernen:

$ docker rm -f 1ce3cdeb4035

Einen bestimmten Container nach Namen entfernen

Docker verfügt auch über einen Mehrzweck-Befehl docker rm, mit dem du Container sowohl nach Namen als auch nach ID entfernen kannst.

Wenn du zum Beispiel einen Container namens web_server hast, kannst du ihn mit dem folgenden Befehl entfernen:

$ docker rm web_server

Zuerst ist es wichtig, den Container zu stoppen. Docker bietet den Befehl docker stop, um einen bestimmten Container zu stoppen.

Alle laufenden Container entfernen

Um alle laufenden Container zu löschen, kannst du den Befehl docker rm verwenden:

$ docker rm $(docker ps -q)

Mit docker ps -q werden die IDs der laufenden Container aufgelistet. Anschließend werden die IDs an den Befehl docker rm übergeben, der alle Container entfernt.

Beachte, dass dieser Befehl nur laufende Container entfernt. Wenn du alle Container, auch die gestoppten, entfernen möchtest, kannst du stattdessen den folgenden Befehl verwenden:

$ docker rm $(docker ps -a -q)

Zusammenfassung

Dieser Artikel hat dir näher gebracht, wie du Docker-Bilder, Volumes und Container entfernst. Du hast verschiedene Methoden kennengelernt, um ein sauberes und organisiertes System zu erhalten. Du erfährst, wie du alle unbenutzten, nicht gekennzeichneten oder bestimmte Bilder nach ID oder Name entfernen kannst. Außerdem hast du gelernt, wie du alle gestoppten Container oder einen bestimmten Container nach ID oder Name löschen kannst.

Das Entfernen von Docker-Images, -Volumes und -Containern ist ein unkomplizierter Prozess, der dir helfen kann, ungenutzte Komponenten zu verwalten, wertvollen Speicherplatz zurückzugewinnen und oft die Systemleistung zu verbessern.

Es ist diese Einfachheit, die Entwickler/innen zu Docker lockt, und es gibt keinen einfacheren Weg, eine in Docker entwickelte Anwendung einzusetzen als mit der Anwendungs-Hosting-Plattform von Kinsta. Du kannst sie jetzt kostenlos testen.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.