Limpe o espaço em disco ocupado pelo Docker
</h1>
<div class="clear"></div>
<div class="postBody">
O Docker ocupa muito espaço: sempre que executar contêineres, extrair imagens, implantar aplicativos e criar nossas próprias imagens, nosso espaço em disco será consumido bastante.
Se você também estiver preocupado com esse problema, vamos dar uma olhada em como o Docker usa o espaço em disco e como reciclá-lo.
O espaço ocupado pela janela de encaixe pode ser visualizado pelo seguinte comando:
$ docker system df
TYPE lista 4 tipos de discos usados pela janela de encaixe:
-
Imagens : o espaço ocupado por todas as imagens, incluindo as extraídas e as construídas localmente.
-
Contêineres : o espaço ocupado pela execução de contêineres, representando o espaço da camada de leitura e gravação de cada contêiner.
-
Volumes locais : espaço para contêineres para montar volumes de dados locais.
-
Cache de compilação : espaço em cache gerado durante o processo de compilação da imagem (disponível apenas ao usar o BuildKit, disponível após o Docker 18.09).
O último RECLAIMABLE é o tamanho reciclável.
Vamos dar uma olhada nesses tipos separadamente.
Uso do disco do contêiner
Cada vez que um contêiner é criado, alguns arquivos e diretórios são criados, por exemplo: -
/ var / lib / docker / containers / ID, se o contêiner usar o modo de log padrão, todos os seus logs serão salvos nesse diretório no formato JSON.
-
O diretório / var / lib / docker / overlay2 contém a camada de leitura e gravação do contêiner.Se o contêiner usar seu próprio sistema de arquivos para salvar dados, ele será gravado nesse diretório.
Agora começamos com um sistema completamente limpo, assumindo que o docker tenha sido instalado:
primeiro, iniciamos um contêiner NGINX:
Agora, depois de executar o comando df, você verá:
um espelho, 126MB
Um contêiner
Não há espaço recuperável no momento, porque o contêiner está em execução e a imagem está sendo usada.
Agora, criamos um arquivo vazio de 100 MB no contêiner:
$ docker exec -ti www \
dd if=/dev/zero of=test.img bs=1024 count=0 seek=$[1024*100]
Verifique o espaço novamente:
Você pode ver que o espaço ocupado pelo contêiner aumentou. Onde esse arquivo está armazenado nesta máquina?
Como mencionado acima, ele é armazenado na camada de leitura e gravação do contêiner.
Quando o contêiner é parado, o espaço ocupado pelo contêiner se torna reciclável:
Como reciclar? Quando um contêiner é excluído, o espaço ocupado por sua camada de leitura e gravação associada é excluído.
Você também pode excluir todos os contêineres parados com um clique:
$ docker container prune
Após excluir o contêiner, a imagem também pode ser reciclada:
O comando de remoção do contêiner do docker acima é excluir o contêiner parado. Se você deseja excluir todos os contêineres (incluindo parado e em execução), pode usar os dois comandos a seguir:
$ docker rm -f $(docker ps -aq)
$ docker container rm -f $(docker container ls -aq)
Espelhar o uso do disco
Algumas imagens são invisíveis:
-
Um sub-espelho é um espelho intermediário que é referenciado por outros espelhos e não pode ser excluído.
-
O espelho no estado suspenso, ou seja, o espelho que não será mais usado, pode ser excluído.
O comando a seguir lista todos os espelhos suspensos:
$ docker image ls -f dangling=true
Exclua esses espelhos:
$ docker image rm $(docker image ls -f dangling=true -q)
或者:
$ docker image prune
Se você deseja excluir todos os espelhos, use o seguinte comando:
do c k e r i m a ge r mdockerimagerm (imagem docker ls -q)
Observe que aimagem queestá sendo usada pelo contêiner não pode ser excluída.
Uso do disco do volume de dados
O volume de dados é o armazenamento de dados fora do sistema de arquivos do próprio contêiner.
Por exemplo, o aplicativo no contêiner tem a função de fazer upload de imagens.Depois de fazer o upload, ele não deve ser salvo no contêiner, porque os dados dentro do contêiner serão excluídos à medida que o contêiner morre, portanto essas fotos devem ser salvas fora do contêiner, que são dados Volume.
Por exemplo, executamos um contêiner do MongoDB para teste e importamos muitos dados de teste.Estes dados não estão dentro do contêiner, mas no volume de dados, porque o Dockerfile do MongoDB usa o volume de dados.
Após a conclusão do teste, o contêiner do MongoDB foi excluído, mas os dados do teste ainda estavam lá e não foram excluídos.
Exclua os volumes de dados que não estão mais em uso:
$ docker volume rm $(docker volume ls -q)
或者:
$ docker volume prune
Uso do disco do Build Build
O Docker 18.09 introduziu o BuildKit, que melhora o desempenho, a segurança, o gerenciamento de armazenamento e outros recursos do processo de compilação.
Você pode usar o comando para excluir o cache de compilação:
$ docker builder prune
Limpeza com um clique
Através das instruções acima, sabemos que o contêiner, o espelho e o volume de dados fornecem o subcomando de remoção para nos ajudar a recuperar espaço.
De fato, também há o subcomando da remoção no nível do sistema de encaixe, que pode limpar o espaço inútil com um clique:
$ docker system prune
É um bom hábito executar este comando regularmente.