1. Análise geral
Para Docker, existem objetos como imagens, contêineres, volumes de armazenamento e redes . Portanto, esses objetos correspondentes também serão produzidos e esses objetos ocuparão espaço em disco. Quando esses objetos não estão sendo usados, para não ocupar espaço adicional em disco, esses objetos precisam ser limpos, ou seja, limpar o lixo. Após o docker versão 1.13, são fornecidos comandos prune para vários objetos e também são fornecidos comandos docker system prune para limpar todos os tipos de objetos . Mas nas versões anteriores ao docker 1.13, você precisa fornecer outras maneiras de limpar o lixo.
2. Limpeza de lixo
2.1 Limpeza de lixo após docker v1.13
2.1.1 Container
Quando o contêiner for interrompido, o sistema não saberá como excluí-lo, a menos que o campo --rm seja definido quando o contêiner estiver em execução . Os contêineres parados ainda ocuparão o espaço de armazenamento do disco. Esses contêineres parados podem ser excluídos por meio da remoção do contêiner do docker .
$ docker container prune AVISO! Isso removerá todos os contêineres parados. Você tem certeza que quer continuar? [s / N] s
Ao executar este comando, ele perguntará se deseja continuar por padrão. Se o campo -f ou -force for definido ao executar o comando, todos os contêineres parados serão excluídos diretamente. Por padrão, todos os contêineres parados serão excluídos quando este comando for executado.Você também pode filtrar os contêineres a serem excluídos definindo o campo –filter. Por exemplo, o comando a seguir exclui apenas os contêineres que foram interrompidos por mais de 24 horas.
$ docker container prune --filter "até = 24h"
2.1.2 Espelho
Ao executar o comando docker images prune , você pode limpar todas as imagens que não estão mais em uso. Por padrão, este comando limpa apenas as imagens cujo status está pendente . Os espelhos cujo status é pendente são desmarcados e não são referenciados por nenhum contêiner.
$ docker image prune AVISO! Isso removerá todas as imagens pendentes. Você tem certeza que quer continuar? [s / N] s
Se desejar remover todas as imagens não utilizadas, você pode fazer isso configurando o campo -a:
$ docker image prune -a AVISO! Isso removerá todas as imagens sem pelo menos um contêiner associado a elas. Você tem certeza que quer continuar? [s / N] s
Ao executar este comando, ele perguntará se deseja continuar por padrão. Se o campo -f ou -force for definido quando o comando for executado, a operação de exclusão será realizada diretamente. Você pode filtrar as imagens a serem excluídas definindo o campo -filter. Por exemplo, o comando a seguir exclui apenas imagens que foram interrompidas por mais de 24 horas.
$ docker image prune -a --filter "até = 24h"
2.1.3 Volume de armazenamento
O volume de armazenamento pode ser usado por um ou mais contêineres e também ocupa espaço em disco. Para manter os dados, os volumes de armazenamento nunca são excluídos automaticamente.
$ docker volume prune AVISO! Isso removerá todos os volumes não usados por pelo menos um contêiner. Você tem certeza que quer continuar? [s / N] s
Ao executar este comando, ele perguntará se deseja continuar por padrão. Se o campo -f ou -force for definido quando o comando for executado, a operação de exclusão será realizada diretamente. Por padrão, todos os volumes de armazenamento não utilizados serão excluídos quando este comando for executado.Você também pode filtrar os volumes de armazenamento a serem excluídos definindo o campo -filter. Por exemplo, o comando a seguir exclui apenas o volume de armazenamento cujo valor de rótulo é keep.
$ docker volume prune --filter "rótulo! = manter"
2.1.4 Rede
A rede docker não ocupa espaço em disco, mas cria regras de iptables , dispositivos de rede de ponte e tabelas de roteamento. Portanto, quando esses recursos não são mais usados, eles devem ser limpos.
$ docker network prune AVISO! Isso removerá todas as redes não usadas por pelo menos um contêiner. Você tem certeza que quer continuar? [s / N] s
Ao executar este comando, ele perguntará se deseja continuar por padrão. Se o campo -f ou -force for definido quando o comando for executado, a operação de exclusão será realizada diretamente. Por padrão, todas as redes não utilizadas serão excluídas quando este comando for executado.Você também pode filtrar as redes a serem excluídas definindo o campo -filter. Por exemplo, o comando a seguir é apenas para redes que foram usadas por mais de 24 horas.
$ docker network prune --filter "até = 24h"
2.1.5 Excluir todos os objetos
O comando docker system prune pode excluir rapidamente todos os objetos não utilizados, incluindo imagens, contêineres, redes e volumes de armazenamento. Antes do docker 17.06.0, os volumes de armazenamento serão limpos ao mesmo tempo. Após o docker 17.06.1, você precisa definir o campo –volumes para limpar os volumes de armazenamento ao mesmo tempo.
$ docker system prune AVISO! Isso removerá: - todos os contêineres interrompidos - todas as redes não usadas por pelo menos um contêiner - todas as imagens pendentes - todo o cache de construção Tem certeza de que deseja continuar? [s / N] s
Se você estiver usando uma versão do docker posterior a 17.06.1, será necessário adicionar o campo –volumes após o comando para limpar o conteúdo do volume de armazenamento.
$ docker system prune --volumes AVISO! Isso removerá: - todos os contêineres interrompidos - todas as redes não usadas por pelo menos um contêiner - todos os volumes não usados por pelo menos um contêiner - todas as imagens pendentes - todo o cache de construção Tem certeza de que deseja continuar? [s / N] s
2.2 Limpeza de lixo antes do docker v1.13
2.2.1 Container
Quando o contêiner for interrompido, o sistema não saberá como excluí-lo, a menos que o campo --rm seja definido quando o contêiner estiver em execução . Os contêineres parados ainda ocuparão o espaço de armazenamento do disco e esses contêineres parados podem ser excluídos por meio do docker rm . O comando a seguir pode limpar todos os contêineres parados.
$ docker rm $ (docker ps -a -q)
2.2.2 Espelho
Ao executar o comando docker rmi , todos os espelhos não usados podem ser limpos.Geralmente, apenas os espelhos com status pendente são limpos . Os espelhos cujo status é pendente são desmarcados e não são referenciados por nenhum contêiner.
$ docker rmi $ (docker images -q -f "dangling = true")
2.2.3 Volume de armazenamento
O volume de armazenamento pode ser usado por um ou mais contêineres e também ocupa espaço em disco. Para manter os dados, os volumes de armazenamento nunca são excluídos automaticamente.
$ docker volume rm $ (docker volume ls -q -f dangling = true)
Referência
1. Endereço "docker container prune": https://docs.docker.com/engine/reference/commandline/container_prune/
2. 《Remover objetos Docker não usados》 地址 : https: //docs.docker.com/config/pruning/
3. Endereço "docker image prune": https://docs.docker.com/engine/reference/commandline/image_prune/
4. Endereço "docker volume prune": https://docs.docker.com/engine/reference/commandline/volume_prune/
5. Endereço "docker network prune": https://docs.docker.com/engine/reference/commandline/network_prune/