¿Existen prácticas recomendadas y / o herramientas para limpiar las imágenes antiguas de Docker de forma regular?

13

¿Existe una forma elegante o una mejor práctica cuando se trata de eliminar imágenes antiguas del registro Docker?

Veo muchas solicitudes / problemas aquí: https://github.com/docker/docker-registry/labels/delete , pero no encontré una solución buena / popular para ello.

Entonces, ¿hay alguna herramienta o técnica que me ayude a hacer eso?

Además, ¿hay alguna mejor práctica que sigas mientras lo haces?

Dawny33
fuente
2
¿Estás preguntando cómo limpiar el registro? (Cuál es el enlace y la pregunta que proporciona), pero la respuesta aceptada no es limpiar el registro, sino limpiar su docker local.
dalore

Respuestas:

10

He tenido buena suerte con Spotify / docker-gc . Se puede ejecutar desde cron o como un contenedor acoplable.

Un simple contenedor de Docker y secuencia de comandos de recolección de basura de imagen.

  • Los contenedores que salieron hace más de una hora se eliminan.
  • Las imágenes que no pertenecen a ningún contenedor restante después de eso se eliminan.
Ahmed Elsabbahy
fuente
2
A primera vista, parece ser, detrás de todas las cosas de bash, más o menos un subconjunto de las frases de la respuesta de @rombob. ¿Es eso cierto o hay alguna "inteligencia" en la docker-gcque me estoy perdiendo?
AnoE
1
Op enlaza y hace una pregunta sobre cómo limpiar del registro, pero docker-gc no limpia del registro, solo lo limpia de su máquina local. Supongo que OP realmente estaba preguntando cómo limpiar localmente
dalore
La página de Docker-gc ahora recomienda usar docker system pruneen su lugar. Pero no encontré cómo excluir algunas imágenes de la eliminación con la ciruela pasa de Docker. ¿Hay alguna manera de excluir algunas imágenes con docker system prune?
Alexander Artemenko
9

No puedo decir que es la mejor práctica, pero esto es lo que usamos activado por cron, feliz de ver mejores sugerencias.

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
fuente
No encadene grep y awk, haga el mismo filtro justo antes del comando awk `regex {command}`
Tensibai
1
@Tensibai cualquier cosa para hacer felices a los asistentes de AWK :)
rombob
Por si acaso, eso no es solo pedante, guarda el engendro del proceso y una gran cantidad de cambios de contexto :) No cambia mucho aquí, pero cualquier ocasión para abogar por él es buena :)
Tensibai
@Tensibai duda, los buenos hábitos pagar con el tiempo, desova nos costó tiempo y dinero :)
rombob
Especialmente cuando analiza / formatea archivos de registro de miles de millones de líneas para prepararse para la entrada R :) Aquí no espero más que unas pocas docenas de líneas.
Tensibai
4

En mi máquina local (mac) tengo un pequeño script que encontré que ejecuto periódicamente, lo que limpia todo el exceso de imágenes clean-docker-for-mac.sh

Para mis servidores ejecuto la limpieza de agua de desagüe / acoplador que periódicamente limpia los contenedores salidos y elimina las imágenes y los volúmenes que no están en uso.

Utilizo muchas imágenes diferentes de Docker para mi trabajo en Codemason, y scripts como estos son necesarios para mí. ¡Disfrutar!

bmagg
fuente