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?


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.

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

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!


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.