O Docker prune é utilizado para eliminar objetos des­ne­ces­sá­rios, como con­ten­to­res inativos, volumes em desuso, redes antigas ou imagens. Desta forma, é possível otimizar a uti­li­za­ção do disco e libertar espaço de ar­ma­ze­na­mento.

O que é o Docker prune?

Os comandos Docker prune e system prune são uti­li­za­dos para limpar sis­te­ma­ti­ca­mente os recursos do Docker de que já não necessita e libertar espaço de ar­ma­ze­na­mento. Quando as imagens, redes, volumes e con­ten­to­res do Docker per­ma­ne­cem sem uti­li­za­ção durante algum tempo, podem ocupar uma grande quan­ti­dade de espaço. O comando prune permite-lhe eliminar ra­pi­da­mente esses recursos que estão sem uti­li­za­ção, para que mantenha o seu sistema or­ga­ni­zado e a funcionar com efi­ci­ên­cia.

Em ambientes de de­sen­vol­vi­mento onde é comum criar e testar con­ten­to­res, é muito frequente acumular-se uma grande quan­ti­dade de objetos obsoletos. O Docker prune não só limpa con­ten­to­res e imagens, como também redes e volumes de que já não necessita, o que facilita con­si­de­ra­vel­mente a gestão dos recursos do Docker e evita que o sistema fique de­sor­ga­ni­zado e so­bre­car­re­gado.

Para que serve o Docker prune?

O comando prune pode ser utilizado em diversas situações no ambiente do Docker. Apre­sen­ta­mos a seguir quatro cenários típicos em que é utilizado:

Para otimizar os processos de trabalho: os ambientes Docker são fre­quen­te­mente uti­li­za­dos para de­sen­vol­vi­mento, testes e produção. Se não forem limpos com frequên­cia, acumulam-se recursos que so­bre­car­re­gam o espaço de ar­ma­ze­na­mento e afetam o de­sem­pe­nho do sistema. Ao utilizar o Docker prune para eliminar esses recursos não uti­li­za­dos, o sistema é otimizado, o que é muito benéfico em ambientes baseados na nuvem, nos quais os custos aumentam à medida que é ne­ces­sá­ria mais ca­pa­ci­dade de ar­ma­ze­na­mento e potência de pro­ces­sa­mento.

Para melhorar a segurança: os recursos do Docker obsoletos ou des­ne­ces­sá­rios podem re­pre­sen­tar riscos de segurança. O Docker prune elimina con­ten­to­res, imagens, redes e volumes que não estão a ser uti­li­za­dos, reduzindo assim o risco de com­po­nen­tes de­sa­tu­a­li­za­dos e po­ten­ci­al­mente inseguros ficarem expostos. Manter um ecos­sis­tema Docker or­ga­ni­zado ajuda a minimizar a su­per­fí­cie de ataque e melhora a segurança de toda a in­fra­es­tru­tura in­for­má­tica.

Para melhorar o de­sem­pe­nho: quando o ambiente Docker está so­bre­car­re­gado, recursos como a CPU e a memória são con­su­mi­dos des­ne­ces­sa­ri­a­mente, o que afeta o de­sem­pe­nho do sistema. Ao realizar limpezas fre­quen­tes com o Docker prune, liberta-se espaço e melhora-se a efi­ci­ên­cia na gestão e execução de con­ten­to­res, o que se traduz em tempos de car­re­ga­mento mais curtos, im­ple­men­ta­ções mais rápidas de apli­ca­ções e, em geral, uma maior ca­pa­ci­dade de resposta do sistema.

Para uma ma­nu­ten­ção mais fácil: a execução frequente do Docker prune facilita con­si­de­ra­vel­mente a ma­nu­ten­ção do ambiente Docker. Ao eliminar recursos não uti­li­za­dos, as tarefas de gestão tornam-se menos com­pli­ca­das para os pro­gra­ma­do­res. Além disso, torna-se mais fácil manter o controlo sobre os com­po­nen­tes Docker ativos e re­le­van­tes, pelo que é possível detetar e resolver problemas mais ra­pi­da­mente. Desta forma, as equipas podem con­cen­trar-se no de­sen­vol­vi­mento e na melhoria das suas apli­ca­ções, em vez de terem de lidar com recursos des­ne­ces­sá­rios.

Sintaxe: como se utiliza o Docker prune?

Tem um ambiente Docker e pretende eliminar recursos para libertar espaço e sim­pli­fi­car a gestão? Nesse caso, basta aceder aos serviços do prune exe­cu­tando este comando:

docker system prune
bash

Por pre­de­fi­ni­ção, o Docker iden­ti­fica os con­ten­to­res parados, as imagens não uti­li­za­das, as redes e os volumes sem uso, e solicita con­fir­ma­ção para os eliminar. Digite y e prima Enter para o fazer. Caso contrário, pode usar a opção -f para ignorar a con­fir­ma­ção e iniciar di­re­ta­mente a limpeza:

docker system prune -f
bash

Re­co­men­da­ção: antes de utilizar o Docker prune, re­co­men­da­mos que verifique quais os recursos do Docker que se encontram atu­al­mente no sistema. Utilize os seguintes comandos para obter uma lista de todos os con­ten­to­res, imagens, redes e volumes:

docker ps -a
docker images
docker volume ls
docker network ls
bash

Opções do Docker prune

Apre­sen­ta­mos a seguir uma tabela com as opções dis­po­ní­veis para o comando docker system prune:

Opção Descrição
--all, -a Elimina todos os recursos Docker não uti­li­za­dos.
--force, -f Executa a limpeza sem con­fir­ma­ção do uti­li­za­dor.
--volumes Elimina volumes não uti­li­za­dos.
--filter, -f Permite filtrar, com base em critérios, os recursos a eliminar.
--help Fornece ajuda para utilizar o comando.

Docker prune: tutorial sobre como utilizar o comando

No Docker, é possível utilizar vários comandos para realizar uma limpeza es­pe­cí­fica de de­ter­mi­na­dos tipos de recursos. Desta forma, pode controlar exa­ta­mente quais os recursos que vai eliminar.

Docker prune --filter

É possível utilizar filtros para controlar quais os recursos a eliminar, sejam eles con­ten­to­res, imagens, redes ou volumes. Esta fun­ci­o­na­li­dade é es­pe­ci­al­mente útil em ambientes de de­sen­vol­vi­mento, onde é comum criar e esquecer ra­pi­da­mente muitos recursos tem­po­rá­rios.

Em geral, utiliza-se esta sintaxe:

docker <command> prune --filter "filter=<value>"
bash

A seguir, enumeram-se alguns dos possíveis filtros:

  • until: serve para filtrar recursos por data de criação. <duration> pode ser um valor numérico seguido de uma unidade, como h (horas), m (minutos) ou s (segundos).
docker <command> prune --filter "until=<duration>"
bash

Exemplo: eliminar todos os con­ten­to­res em espera há mais de 24 horas.

docker container prune --filter "until=24h"
bash
  • label: filtra recursos com base nas suas etiquetas do Docker.
docker <command> prune --filter "label=<label>"
bash

Exemplo: limpar todos os volumes não uti­li­za­dos que tenham a etiqueta mylabel.

docker volume prune --filter "label=mylabel"
bash
  • dangling: filtra os recursos que já não estão as­so­ci­a­dos a nenhum contentor.
docker <command> prune --filter "dangling=true"
bash

Exemplo: eliminar todas as imagens que já não estão em uso (dangling).

docker image prune --filter "dangling=true"
bash

Para além dos filtros men­ci­o­na­dos, existem também opções de filtros mais es­pe­cí­fi­cos, consoante o tipo de recurso:

  • before e since para imagens: filtram as imagens de acordo com a data de criação, seja antes ou a partir de um momento es­pe­cí­fico.
  • exited para con­ten­to­res: filtra os con­ten­to­res de acordo com o seu estado de saída (por exemplo, exited=0 para con­ten­to­res que ter­mi­na­ram cor­re­ta­mente).

Eliminar recursos do Docker

Passo 1: abra um terminal ou uma linha de comandos no seu sistema.

Passo 2: execute o comando dockerprune para limpar o sistema:

docker {resource} prune
bash

Substitua {resource} pelo tipo de recursos que pretende eliminar. Os valores válidos são container, image, volume e network.

Eliminar con­ten­to­res Docker

Por pre­de­fi­ni­ção, o Docker não liberta au­to­ma­ti­ca­mente os con­ten­to­res quando estes terminam o seu ciclo de vida. Por isso, é im­por­tante verificar re­gu­lar­mente os con­ten­to­res parados e eliminá-los, se ne­ces­sá­rio, pois assim os recursos blo­que­a­dos são li­ber­ta­dos e ficam dis­po­ní­veis para os con­ten­to­res em execução. A seguir, des­cre­ve­mos dois métodos para o fazer:

  • docker rm: este comando foi concebido para eliminar ma­nu­al­mente um ou vários con­ten­to­res Docker, pelo que é a opção mais adequada se souber quais os con­ten­to­res que pretende eliminar. Deve es­pe­ci­fi­car os IDs ou os nomes dos con­ten­to­res que pretende eliminar, para que possa eliminar apenas de­ter­mi­na­dos con­ten­to­res sem afetar os restantes.

Aqui está um exemplo para eliminar os con­ten­to­res com os nomes container1 e container2:

docker rm container1 container2
bash
  • docker container prune: este comando foi concebido para eliminar de uma só vez vários con­ten­to­res parados. Esta opção é ideal para libertar espaço de forma rápida e eficiente, eli­mi­nando todos os con­ten­to­res parados que não tenham processos em execução.
docker container prune
bash

Este comando lista todos os con­ten­to­res parados e solicita a sua con­fir­ma­ção antes de os eliminar, o que se revela es­pe­ci­al­mente útil em ambientes onde são criados muitos con­ten­to­res tem­po­rá­rios que, pos­te­ri­or­mente, já não são ne­ces­sá­rios.

Para a gestão e ma­nu­ten­ção diárias do seu ambiente Docker, re­co­men­da­mos que utilize fre­quen­te­mente o comando docker container prune para que os con­ten­to­res parados sejam eli­mi­na­dos au­to­ma­ti­ca­mente. Isto irá ajudá-lo a poupar tempo e garantir que não existem recursos des­ne­ces­sá­rios que possam pre­ju­di­car o de­sem­pe­nho do sistema. Por outro lado, docker rm é ideal quando é ne­ces­sá­rio eliminar apenas de­ter­mi­na­dos con­ten­to­res, seja para testes, de­sen­vol­vi­mento ou outros re­qui­si­tos.

Eliminar imagens do Docker

As imagens do Docker são a base dos con­ten­to­res. Com o tempo, podem acumular-se muitas versões e etiquetas. Ao criar ou atualizar novas imagens, ficam fre­quen­te­mente imagens antigas ou não uti­li­za­das (as chamadas «dangling»), que ocupam espaço no seu sistema e podem afetar o de­sem­pe­nho, sobretudo se forem em grande quan­ti­dade.

O Docker prune permite iden­ti­fi­car e eliminar imagens que já não são uti­li­za­das da seguinte forma:

docker image prune [Options]
bash

A seguir, descrevem-se algumas das opções possíveis.

  • -a, --all: serve para eliminar não só as imagens pendentes, mas também as imagens não uti­li­za­das. As imagens não uti­li­za­das são aquelas que já não têm tags e, por isso, não podem ser re­fe­ren­ci­a­das di­re­ta­mente por tags.
docker image prune -a
bash
  • -f, --force: por pre­de­fi­ni­ção, o Docker solicita uma con­fir­ma­ção antes de eliminar as imagens. Através dos passos -f ou --force, podes ignorar essa etapa de con­fir­ma­ção e proceder di­re­ta­mente à eli­mi­na­ção.
docker image prune -f
bash

Eliminar todas as imagens do Docker

Também podes eliminar ra­pi­da­mente todas as imagens do Docker de que já não precisas. Para utilizar o Docker prune cor­re­ta­mente, abre primeiro o terminal ou a linha de comandos e digita o seguinte:

docker image prune -a --force
bash

Cer­ti­fi­que-se de iden­ti­fi­car quais as imagens que serão eli­mi­na­das antes de iniciar a limpeza. A opção -a também pode eliminar imagens não uti­li­za­das de que ainda possa precisar.

Eliminar volumes do Docker

Os volumes são per­sis­ten­tes e mantêm os dados para além do tempo de vida útil do contentor. Com o tempo, estes volumes podem aumentar e ocupar recursos des­ne­ces­sá­rios.

docker volume prune
bash

Este comando procura todos os volumes nos quais já não existem con­ten­to­res ativos. Será apre­sen­tada uma lista de volumes que se sugere eliminar e será so­li­ci­tada uma con­fir­ma­ção antes de pros­se­guir com a limpeza.

Por outro lado, o comando docker volume rm elimina di­re­ta­mente volumes es­pe­cí­fi­cos do Docker, uma opção útil quando sabe exa­ta­mente qual o volume que pretende eliminar, in­de­pen­den­te­mente de este estar a ser utilizado por um contentor ou não. Para eliminar um volume es­pe­cí­fico do Docker, utilize o comando docker volume rm seguido do nome ou do ID do volume:

docker volume rm volume_name
bash

Este comando elimina os dados de forma de­fi­ni­tiva, pelo que deve cer­ti­fi­car-se de que sabe o nome ou o ID exato do volume que pretende eliminar.

Eliminar redes Docker

As redes do Docker são um com­po­nente fun­da­men­tal para a co­mu­ni­ca­ção entre con­ten­to­res, quer estes se encontrem no mesmo anfitrião ou dis­tri­buí­dos por vários. Estas redes per­ma­ne­cem ativas mesmo depois de os con­ten­to­res serem parados ou eli­mi­na­dos. Com o tempo, podem acumular-se redes que já não são uti­li­za­das e que ocupam recursos des­ne­ces­sá­rios. O comando docker prune network é uma forma simples de iden­ti­fi­car e eliminar essas redes que já não estão em uso.

Este é o comando:

docker network prune [OPTIONS]
bash

O Docker gera uma lista de todas as redes que já não são uti­li­za­das por con­ten­to­res ativos ou que já não estão re­fe­ren­ci­a­das. Em seguida, solicita uma con­fir­ma­ção antes de as eliminar.

Melhores práticas do Docker prune

  • Au­to­ma­ti­za­ção da limpeza: im­ple­mente scripts ou fer­ra­men­tas au­to­ma­ti­za­das para eliminar re­gu­lar­mente imagens, con­ten­to­res e volumes Docker não uti­li­za­dos. Desta forma, manterá o ambiente limpo e otimizará o de­sem­pe­nho.
  • Patches de segurança e atu­a­li­za­ções: cer­ti­fi­que-se de que os motores Docker, os sistemas ope­ra­ti­vos do host e todas as imagens Docker sejam ve­ri­fi­ca­dos e atu­a­li­za­dos re­gu­lar­mente para minimizar as vul­ne­ra­bi­li­da­des.
  • Mo­ni­to­ri­za­ção e registo: utilize fer­ra­men­tas de mo­ni­to­ri­za­ção e registo para su­per­vi­si­o­nar o de­sem­pe­nho dos con­ten­to­res, detetar eventos ines­pe­ra­dos e promover a pro­a­ti­vi­dade na ma­nu­ten­ção.
  • Cópias de segurança externas: es­ta­be­leça rotinas para realizar cópias de segurança externas de dados im­por­tan­tes dos con­ten­to­res Docker, por exemplo, fazendo de vez em quando cópias de segurança de conteúdos de bases de dados ou ficheiros de con­fi­gu­ra­ção.
  • Ve­ri­fi­ca­ção manual antes da eli­mi­na­ção: verifique cui­da­do­sa­mente se realmente não necessita de de­ter­mi­na­dos recursos antes deos eliminar. Desta forma, haverá menos risco de perder dados que não pretendia apagar ou de ocorrerem in­ter­rup­ções em processos em curso.
Dica

Se acabou de começar a trabalhar com o Docker e precisa de aprender o básico, re­co­men­da­mos o nosso tutorial sobre o Docker.

Ir para o menu principal