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.
Schreibe einen Kommentar