Docker: Alle Images und Container entfernen
Problem:
Du verwendest Docker, aber die Arbeit damit hat viele Images und Container erstellt. Du möchtest alle entfernen, um Festplattenplatz zu sparen.
Lösung
Warnung: Dies wird alle deine Images und Container zerstören. Es gibt keine Möglichkeit, sie wiederherzustellen!
Führe diese Befehle in einer Shell aus:
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)Diese Lösung wurde von GitHub-Benutzer @crosbymichael in diesem Issue vorgeschlagen.
Falls du auch die Images löschen möchtest, die in Repositories referenziert werden, verwende
docker rmi $(docker images -q) --forceHintergrundinformationen:
Du kannst die Container auf deinem Computer mit folgendem Befehl anzeigen:
docker container lsBeispielausgabe:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3477a4dcdce2 docker.elastic.co/elasticsearch/elasticsearch-oss:6.7.1 "/usr/local/bin/dock…" 2 days ago Up 2 days 0.0.0.0:9200->9200/tcp, 9300/tcp elasticsearch1
67997f002f15 appbaseio/dejavu "http-server '-p 135…" 2 days ago Up 2 days 0.0.0.0:1358->1358/tcp dejavuWie man sehen kann, laufen derzeit zwei Container auf diesem Computer.
Für jeden Container zeigt die Spalte IMAGE an, auf welchem Image der Container läuft. Zum Beispiel läuft der zweite Container auf dem Image appbaseio/dejavu.
Wenn wir Docker anweisen, alle aktuell auf dem Computer gelisteten Images anzuzeigen:
$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 39ac507bd271 11 days ago 962MB
<none> <none> 6a2c829a5d4f 11 days ago 962MB
docker.elastic.co/elasticsearch/elasticsearch-oss 6.7.1 c91b419ac445 3 weeks ago 682MB
pypy 3 75e018538e96 4 weeks ago 962MB
node 10 64c810caf95a 4 weeks ago 899MB
appbaseio/dejavu latest 47b8375dc541 2 months ago 141MB
risingstack/alpine 3.4-v4.4.4-3.6.1 2d384efd00ab 2 years ago 247MBMan kann sofort sehen, dass es deutlich mehr Images als Container gibt.
Dafür gibt es vier Hauptgründe:
- Docker behält alte Versionen von Containern, sie werden nicht automatisch gelöscht. In diesem Beispiel gibt es zwei Versionen von
docker.elastic.co/elasticsearch/elasticsearch-oss: Version6.7.1und Version7.0.0, obwohl ich aktuell nur Version6.7.1verwende. Laut der Liste belegt Version7.0.0zusätzliche 682 Megabyte Platz auf meiner SSD, aber beachte, dass diese Zahl möglicherweise nicht genau ist (siehe Layered Images unten). - Docker löscht nicht automatisch Images, die man nicht mehr verwendet (z.B. wenn man ein Image nur für einen kurzen Test verwendet hat, aber nicht mehr braucht).
- Docker verwendet Layered Images. Das bedeutet, dass ein Image wie
appbaseio/dejavunicht eigenständig ist, sondern (normalerweise) auf einem zugrunde liegenden Image wieubuntuoderdebianbasiert. In den meisten Fällen gibt es viele Layer (typischerweise 5-10) eines Images aufgrund der Art und Weise, wie sie gebaut werden. Während dies zu weniger Festplattenverbrauch führt, da einige Images von mehreren „Tochter“-Images verwendet werden, führt es dennoch zu vielen Images, die auf der Festplatte herumliegen, oft einschließlich ungenutzter Zwischenimages. - Falls du Docker-Images selbst baust, insbesondere wenn du ein eigenes Dockerfile erstellst, werden während der Entwicklung oft viele Images generiert (die Zwischenversionen der Software darstellen, die du entwickelst).
Um ein Image, das man nicht mehr benötigt, zu löschen, verwende den Befehl docker image rm <Image-ID>. Kopiere die Image-ID aus der Spalte IMAGE ID der Ausgabe von docker image ls wie oben gezeigt.
Um beispielsweise das Image der Version 7.0.0 von Elasticsearch zu löschen, verwende
$ docker image rm 0e92b9e5fe1e
Untagged: docker.elastic.co/elasticsearch/elasticsearch-oss:7.0.0
Untagged: docker.elastic.co/elasticsearch/elasticsearch-oss@sha256:e9ab1f4c2ffbc7054dab91e8dc7fd9a56d53cce734098910d876eb14849b1ba3
Deleted: sha256:0e92b9e5fe1e0949f5174ed86d9cbc3c2a041df493453f82b6c044ff78c7d17b
Deleted: sha256:c2a552806b86aba72a6e6ea5efaaa295286e8b0cf42a14d799428e58f20e7090
Deleted: sha256:71e7a706f7c03f0c7add24844f7b311edf83838ef383a877bcb94684b011893d
Deleted: sha256:d43e5d351c26273e43b11f6937cb9a3192d856b4e083acfbc14b8500056221f2
Deleted: sha256:f3a2ae77ca96f2f55300b00beedbf14ade0a27bf29c395dcbf84b5bf02ef80ad
Deleted: sha256:5d7f2d83e59c0684b4a94ab5f6479d798444bdca8fe6c813f7ef6188cdd12ce5
Deleted: sha256:cc16decd0c6f218c3a21749e747d43deced9e8929e8db0b6050dd4102301651aWie man der Ausgabe entnehmen kann, wird dies nicht nur das ElasticSearch-Image 0e92b9e5fe1e selbst löschen, sondern auch alle anderen Images, von denen dieses Image abhängt (die nicht auch von einem anderen Image verwendet werden).