Gibt es Best Practices und / oder Tools zum regelmäßigen Reinigen alter Docker-Images?

13

Gibt es eine elegante Methode oder eine bewährte Methode zum Löschen alter Bilder aus der Docker-Registrierung?

Ich sehe viele Anfragen / Probleme hier: https://github.com/docker/docker-registry/labels/delete , habe aber keine gute / beliebte Lösung dafür gefunden.

Also, gibt es ein Werkzeug oder eine Technik, die mir dabei helfen würde?

Gibt es auch Best Practices, die Sie dabei befolgen?

Dawny33
quelle
2
Fragen Sie, wie Sie die Registrierung bereinigen können? (Was ist der Link und die Frage, die Sie bereitstellen), aber die akzeptierte Antwort ist nicht die Reinigung der Registrierung, sondern die Reinigung Ihres lokalen Dockers.
Dalore

Antworten:

10

Ich hatte viel Glück mit Spotify / Docker-GC . Es kann von cron oder als Docking-Container ausgeführt werden.

Ein einfaches Docker-Container- und Image Garbage Collection-Skript.

  • Container, die vor mehr als einer Stunde beendet wurden, werden entfernt.
  • Bilder, die danach nicht mehr zu einem verbleibenden Container gehören, werden entfernt.
Ahmed Elsabbahy
quelle
2
Auf den ersten Blick scheint es sich bei all dem Bash-Zeug mehr oder weniger um eine Teilmenge der Einzeiler aus @rombobs Antwort zu handeln. Ist das wahr oder gibt es eine "Intelligenz" docker-gc, die ich vermisse?
AnoE
1
Op verlinkt und stellt die Frage, wie die Registrierung gelöscht werden soll. Docker-gc löscht die Registrierung jedoch nicht, sondern nur den lokalen Computer. Ich denke, OP fragte wirklich, wie man vor Ort
aufräumt
Die Seite von Docker-gc empfiehlt nun, stattdessen zu verwenden docker system prune. Aber ich habe nicht herausgefunden, wie ich einige Bilder mit Dockers Prune vom Entfernen ausschließen kann. Gibt es eine Möglichkeit, einige Bilder mit auszuschließen docker system prune?
Alexander Artemenko
9

Ich kann es nicht als Best Practice bezeichnen, aber dies ist das, was wir verwenden, ausgelöst durch cron. Wir freuen uns über bessere Vorschläge.

echo "safely removing untagged images"
docker rmi $(docker images | awk '/<none>/{print $3}')

echo "safely removing stopped containers"
docker rm $(docker ps -a -q)

echo "safely removing old containers"
docker ps -a | awk '/weeks ago|months ago|days ago/{print $1}' | xargs --no-run-if-empty docker rm

echo "safely removing old images"
docker images | awk '/weeks ago|months ago|days ago/{print $3}' | xargs --no-run-if-empty docker rmi

echo "safely removing old volumes, custom rebuild of martin/docker-cleanup-volumes image"
docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(readlink -f /var/lib/docker):/var/lib/docker --rm example/docker-cleanup-volumes

echo "native cleanup Docker => 12"
docker system prune -f
Rombob
quelle
Bitte
verketten
1
@ Tensibai alles, um AWK Zauberer glücklich zu machen :)
Rombob
Nur für den Fall, das ist nicht nur umständlich, Sie sparen Prozess-Spawn und viele
Kontextänderungen
@ Tensibai auf jeden Fall, gute Gewohnheiten zahlen sich mit der Zeit aus, Laichen kosten uns Zeit und Geld :)
Rombob
Insbesondere, wenn Sie Milliardenzeilen-Protokolldateien analysieren / formatieren, um sie für die R-Eingabe vorzubereiten :) Hier erwarte ich nicht mehr als ein paar Dutzend Zeilen.
Tensibai
4

Auf meinem lokalen Computer (Mac) habe ich ein kleines Skript gefunden, das regelmäßig ausgeführt wird und das alle überschüssigen Bilder von clean-docker-for-mac.sh entfernt

Für meine Server führe ich eine Schmelzwasser- / Docker-Bereinigung durch, die in regelmäßigen Abständen vorhandene Container bereinigt und nicht verwendete Images und Volumes entfernt.

Für meine Arbeit an Codemason verwende ich viele verschiedene Docker-Images, die für mich unbedingt erforderlich sind. Genießen!

bmagg
quelle
0

docker system prune --volumes

Ist der Weg, dies seit v17 zu tun. Dokumente hier

Mbrevda
quelle