Esistono best practice e / o strumenti per la pulizia periodica di vecchie immagini Docker?


13

Esiste un modo elegante o una buona pratica quando si tratta di eliminare vecchie immagini dal registro Docker?

Vedo molte richieste / problemi qui: https://github.com/docker/docker-registry/labels/delete , ma non ho trovato una soluzione buona / popolare per questo.

Quindi, c'è uno strumento o una tecnica che mi aiuterebbe a farlo?

Inoltre, ci sono delle migliori pratiche che segui mentre lo fai?


2
Stai chiedendo come pulire il registro? (Qual è il collegamento e la domanda forniti), ma la risposta accettata non è la pulizia del registro, ma la pulizia della finestra mobile locale.
dalore,

Risposte:


10

Ho avuto fortuna con Spotify / docker-gc . Può essere eseguito da cron o come contenitore docker.

Un semplice contenitore Docker e uno script di raccolta dati inutili.

  • I contenitori che sono usciti più di un'ora fa vengono rimossi.
  • Le immagini che non appartengono ad alcun contenitore rimanente dopo che sono state rimosse.

2
A prima vista, sembra essere, dietro tutta la roba bash, più o meno un sottoinsieme delle linee di risposta della risposta di @rombob. È vero o c'è un po 'di "intelligenza" in docker-gcciò che mi manca?
AnoE

1
Op collega e fa una domanda su come pulire dal registro, ma docker-gc non pulisce dal registro, pulisce semplicemente dal tuo computer locale. Suppongo che OP stesse davvero chiedendo come pulire a livello locale
dalore,

La pagina di Docker-gc ora consiglia di usare docker system pruneinvece. Ma non ho trovato il modo di escludere alcune immagini dalla rimozione con la prugna di Docker. C'è un modo per escludere alcune immagini con docker system prune?
Alexander Artemenko,

9

Non posso chiamare è la migliore pratica, ma questo è ciò che usiamo attivato da cron, felice di vedere suggerimenti migliori.

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

Per favore, non concatenare grep e awk, fai lo stesso filtro appena prima del comando awk `regex {command}`
Tensibai

1
@Tensibai qualsiasi cosa per rendere felici i maghi AWK :)
rombob

Per ogni evenienza, non è solo pedante, si risparmia la generazione del processo e una grande quantità di cambiamenti di contesto :) Qui non cambia molto, ma ogni occasione per difenderlo è buona :)
Tensibai

@Tensibai sicuramente, le buone abitudini ripagano con il tempo, le spawn ci costano tempo e denaro :)
rombob

Specialmente quando analizzi / formatti miliardi di file di log per prepararti all'input R :) Qui non mi aspetto più di qualche dozzina di righe.
Tensibai,

4

Sul mio computer locale (mac) ho un piccolo script che ho scoperto di eseguire periodicamente che pulisce tutte le immagini in eccesso su clean-docker-for-mac.sh

Per i miei server eseguo meltwater / docker-cleanup che pulisce periodicamente i contenitori usciti e rimuove immagini e volumi che non sono in uso.

Uso molte immagini Docker diverse per il mio lavoro su Codemason che script come questi sono necessari per me. Godere!


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.