Existem práticas recomendadas e / ou ferramentas para limpar imagens antigas do Docker regularmente?

13

Existe uma maneira elegante ou uma prática recomendada para excluir imagens antigas do registro do Docker?

Vejo muitos pedidos / problemas aqui: https://github.com/docker/docker-registry/labels/delete , mas não encontrei uma solução boa / popular para isso.

Então, existe uma ferramenta ou técnica que me ajudaria a fazer isso?

Além disso, existem práticas recomendadas que você segue ao fazer isso?

Dawny33
fonte
2
Você está perguntando como limpar o registro? (Qual é o link e a pergunta que você fornece), mas a resposta aceita não é limpar o registro, mas limpar a janela de encaixe local.
dalore

Respostas:

10

Eu tive boa sorte com o Spotify / docker-gc . Pode ser executado a partir do cron ou como um contêiner de docker.

Um contêiner Docker simples e um script de coleta de lixo de imagens.

  • Os contêineres que saíram há mais de uma hora são removidos.
  • Imagens que não pertencem a nenhum contêiner restante depois disso são removidas.
Ahmed Elsabbahy
fonte
2
À primeira vista, parece que, por trás de todo o material do bash, mais ou menos um subconjunto dos versos da resposta de @rombob. Isso é verdade ou há alguma "inteligência" em docker-gcque estou perdendo?
AnoE
1
Op links e faz uma pergunta sobre como limpar a partir do registro, mas o docker-gc não limpa a partir do registro, apenas limpa da sua máquina local. Eu acho que OP foi realmente perguntando como limpar localmente
dalore
A página do Docker-gc agora recomenda o uso docker system prune. Mas não achei como excluir algumas imagens da remoção com a ameixa de Docker. Existe uma maneira de excluir algumas imagens com docker system prune?
Alexander Artemenko
9

Não é possível chamá-lo de melhor prática, mas é isso que usamos acionado pelo cron, feliz em ver melhores sugestões.

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
fonte
Por favor, não encadeie grep e awk, faça o mesmo filtro imediatamente antes do comando awk `regex {command}`
Tensibai 27/03
1
Nada @Tensibai fazer AWK assistentes feliz :)
rombob
Apenas no caso, isso não é apenas pedante, você economiza desova processo e um grande monte de mudanças de contexto :) Isso não muda muito aqui, mas qualquer ocasião ao advogado para ele é bom :)
Tensibai
@Tensibai definitivamente, bons hábitos de pagar com o tempo, desova nos custou tempo e dinheiro :)
rombob
Especialmente quando você analisa / formata bilhões de linhas de arquivos de log para se preparar para a entrada R :) Aqui não espero mais do que algumas dezenas de linhas.
Tensibai 27/03
4

Na minha máquina local (mac), tenho um pequeno script que descobri que é executado periodicamente, o que limpa todo o excesso de imagens acima clean-docker-for-mac.sh

Para meus servidores, eu executo o derretimento / limpeza da janela de encaixe, que limpa periodicamente os contêineres existentes e remove imagens e volumes que não estão em uso.

Uso muitas imagens diferentes do Docker no meu trabalho no Codemason, de que scripts como esses são necessários para mim. Desfrutar!

bmagg
fonte
0

docker system prune --volumes

É a maneira de fazer isso desde a v17. Documentos aqui

Mbrevda
fonte