# Tutorial Docker prune: Sintaxe e exemplos

O Docker `prune` **remove recursos obsoletos**, como contêineres parados, volumes não utilizados, redes antigas e imagens. Dessa forma, você otimiza o uso do disco e libera espaço de armazenamento.

## O que é Docker `prune`?

Docker `prune` ou `system prune` é útil para **limpar sistematicamente** recursos [Docker](https://www.ionos.com/digitalguide/server/know-how/what-is-docker/ "O que é Docker") que não são mais necessários e, assim, ganhar mais espaço de armazenamento. Quando [contêineres Docker](https://www.ionos.com/digitalguide/server/know-how/docker-container/ "Contêiner Docker"), imagens, redes e volumes permanecem não utilizados por um longo período, eles podem ocupar uma quantidade considerável de espaço. Com `prune`, você pode eliminar rapidamente esses recursos não utilizados e manter o sistema limpo e com bom desempenho.

Principalmente em **ambientes de desenvolvimento**, onde novos contêineres são frequentemente criados e testados, uma variedade de objetos obsoletos pode se acumular. O Docker `prune` não limpa apenas contêineres e imagens, mas também redes e volumes de que você não precisa mais. Isso facilita significativamente a administração dos recursos do Docker e minimiza o risco de um sistema desordenado e sobrecarregado.

## Para que serve o Docker `prune`?

O comando `prune` é adequado para várias situações no trabalho diário com o Docker. A seguir, listamos quatro cenários típicos de uso.

- **Otimizar processos de trabalho:** Os ambientes Docker são frequentemente utilizados de forma intensiva para desenvolvimento, testes e produção. Sem uma limpeza regular, pode haver rapidamente um acúmulo de recursos desnecessários. Esse excesso não só aumenta a demanda por armazenamento, mas também pode afetar negativamente o desempenho do sistema. Ao remover recursos não utilizados com o Docker `prune`, os recursos do sistema são utilizados de forma mais eficiente. Isso é particularmente crucial em ambientes baseados em nuvem, onde os custos aumentam com a demanda por recursos de armazenamento e processamento.
- **Aumentar a segurança:** Recursos desnecessários e obsoletos do Docker podem representar riscos de segurança. Docker `prune` remove contêineres, imagens, redes e volumes não utilizados, reduzindo o risco de que componentes antigos e possivelmente inseguros permaneçam desprotegidos. Um ecossistema do Docker bem-organizado ajuda a minimizar a superfície de ataque e a melhorar a segurança de toda a infraestrutura de TI.
- **Aumentar o desempenho:** Um ambiente do Docker sobrecarregado pode afetar o desempenho do sistema, ao consumir recursos como CPU e memória de forma desnecessária. A limpeza regular com Docker `prune` libera espaço de armazenamento e aumenta a eficiência da gestão e execução dos contêineres. Isso reduz significativamente os tempos de carregamento, acelera o provisionamento aplicações e, no geral, melhora a capacidade de resposta do sistema.
- **Simplificar a manutenção:** A realização regular do Docker `prune` simplifica significativamente a manutenção do seu ambiente Docker. A remoção de recursos não utilizados reduz a complexidade das tarefas de administração para desenvolvedores. Além disso, é mais fácil manter o controle sobre os componentes Docker ativos e relevantes, o que acelera o diagnóstico e a resolução de problemas. Isso não só economiza tempo na administração, mas também permite que as equipes se concentrem mais no desenvolvimento e aprimoramento de suas aplicações, em vez de lidarem com recursos desnecessários.

## Sintaxe do Docker `prune`

Você tem um **ambiente Docker** e deseja limpar recursos para liberar espaço de armazenamento e simplificar a administração? Nesse caso, basta executar o seguinte comando para utilizar o Docker `prune`:

```bash
docker system prune
```

Por padrão, contêineres parados, imagens não utilizadas, redes e volumes sem uso são identificados e sugeridos para limpeza. O Docker solicita sua confirmação para removê-los. Digite `y` e pressione Enter. Alternativamente, você também pode usar a opção `-f` para pular a confirmação e executar a limpeza imediatamente:

```bash
docker system prune -f
```

**Dica**: É importante verificar quais recursos do Docker estão presentes no sistema antes de aplicar Docker `prune`. Execute os seguintes comandos para listar todos os contêineres, imagens, redes e volumes:

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

### Opções do Docker `prune`

A tabela a seguir apresenta uma visão geral das opções de `docker system prune`.

<table>
  <thead>
    <tr>
      <th>Opção</th>
      <th>Descrição</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`--all, -a`</td>
      <td>Remove todos os recursos Docker não utilizados.</td>
    </tr>
    <tr>
      <td>`--force, -f`</td>
      <td>Realiza a limpeza sem confirmação do usuário.</td>
    </tr>
    <tr>
      <td>`--volumes`</td>
      <td>Remove volumes não utilizados.</td>
    </tr>
    <tr>
      <td>`--filter, -f`</td>
      <td>Permite filtrar os recursos a serem removidos com base em critérios.</td>
    </tr>
    <tr>
      <td>`--help`</td>
      <td>Exibe ajuda sobre o uso do comando.</td>
    </tr>
  </tbody>
</table>

## Tutorial: Como usar o comando Docker `prune`

O Docker oferece vários comandos que permitem uma limpeza seletiva de tipos específicos de recursos. Isso lhe dá a flexibilidade para controlar exatamente quais recursos devem ser removidos.

### Docker `prune --filter`

Você pode usar **filtros** para controlar a seleção dos recursos a serem removidos, como contêineres, imagens, redes e volumes. Isso é especialmente útil em ambientes de desenvolvimento, onde muitos recursos temporários podem ser criados e rapidamente esquecidos.

**A sintaxe geral do comando é:**

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

**Entre as principais opções de filtro estão:**

- `until`: Filtra recursos com base na data de criação. `<duration>` deve ser um valor numérico com uma unidade como `h` (horas), `m` (minutos) ou `s` (segundos).

```bash
docker <command> prune --filter "until=<duration>"
```

**Exemplo:** Remover todos os contêineres parados há mais de 24 horas

```bash
docker container prune --filter "until=24h"
```

- `label`: Filtra recursos com base em suas etiquetas no Docker

```bash
docker <command> prune --filter "label=<label>"
```

**Exemplo:** Remover todos os volumes não utilizados que possuem a etiqueta `mylabel`

```bash
docker volume prune --filter "label=mylabel"
```

- `dangling`: Filtra recursos que não estão mais em uso por um contêiner

```bash
docker <command> prune --filter "dangling=true"
```

**Exemplo:** Remover todas as imagens órfãs (*dangling*).

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

Além dos filtros principais acima, existem também opções de filtro mais específicas, dependendo do tipo de recurso:

- `before` e `since` para imagens: Filtram imagens com base na sua data de criação, antes ou desde um determinado ponto no tempo
- `exited` para contêineres: Filtra contêineres com base no status de saída (por exemplo, `exited=0` para contêineres que finalizaram com sucesso)

### Remover recursos Docker

**Passo 1:** Abra um terminal ou prompt de comando no seu sistema. **Passo 2:** Execute o comando `docker prune` para limpar o sistema:

```bash
docker {resource} prune
```

Substitua `{resource}` pelo tipo de recurso que você deseja limpar. Os valores válidos são `container`, `image`, `volume` e `network`.

### Remover contêineres Docker

Por padrão, **o Docker não remove automaticamente os contêineres** depois que eles chegam ao fim do seu ciclo de vida. Portanto, é importante verificar regularmente os contêineres parados e removê-los conforme necessário para liberar recursos bloqueados para contêineres em execução. Existem duas maneiras de fazer isso.

- `docker rm`: O comando `docker rm` serve para remover **manualmente** um ou vários contêineres do Docker. Se você sabe exatamente quais contêineres deseja remover, essa é a abordagem mais adequada. Você deve fornecer explicitamente os IDs ou nomes dos contêineres que deseja remover. Dessa forma, você pode remover apenas determinados contêineres do seu ambiente, sem afetar outros.

Aqui está um exemplo para excluir os contêineres com os nomes `container1` e `container2`:

```bash
docker rm container1 container2
```

- `docker container prune`: Por outro lado, `docker container prune` é um comando usado para remover vários **contêineres parados de uma vez só**. Este método é particularmente útil para liberar espaço rapidamente, excluindo todos os contêineres parados que atualmente não possuem processos em execução.

```bash
docker container prune
```

Todos os contêineres parados serão listados, e o Docker solicitará sua confirmação antes de removê-los. Isso é extremamente útil em ambientes onde muitos contêineres temporários são criados e depois se tornam desnecessários.

Para a administração e manutenção diária do seu ambiente Docker, é recomendável usar **regularmente** o comando `docker container prune` para remover contêineres parados. Isso economiza tempo e garante que recursos desnecessários não comprometam o desempenho do sistema. O `docker rm`, por outro lado, é ideal quando você deseja remover contêineres específicos de forma seletiva e controlada, seja para testes, desenvolvimento ou outros requisitos específicos.

### Remover imagens Docker

[Imagens Docker](https://www.ionos.com/digitalguide/server/know-how/docker-images/ "Imagens Docker") são os blocos de construção dos contêineres. Com o tempo, você pode acumular muitas versões e tags diferentes. Ao criar ou atualizar novas imagens, frequentemente permanecem versões antigas ou não mais utilizadas, conhecidas como **dangling** ou, em português, **órfãs**. Essas imagens ocupam espaço no seu sistema e podem afetar o desempenho, especialmente quando há um grande número delas.

Com o Docker `prune`, você pode identificar e remover imagens não mais utilizadas:

```bash
docker image prune [Options]
```

As principais **opções** incluem:

- `-a`, `--all`: Essa opção remove não apenas imagens *dangling*, mas também imagens sem uso. Imagens sem uso são aquelas que não possuem tags e, portanto, não podem ser referenciadas diretamente.

```bash
docker image prune -a
```

- `-f`, `--force`: Por padrão, o Docker solicita uma confirmação antes que as imagens sejam realmente excluídas. Com `-f` ou `--force`, você pode ignorar essa etapa de confirmação e executar a limpeza imediatamente.

```bash
docker image prune -f
```

### Remover todas as imagens Docker

Você também pode remover todas as imagens do Docker que não são mais necessárias no seu sistema de forma eficiente e rápida. Para usar o Docker `prune` de forma eficaz, abra o terminal ou prompt de comando e execute o seguinte comando:

```bash
docker image prune -a --force
```

Certifique-se de verificar quais imagens serão removidas antes de realizar a limpeza. A opção `-a` também pode remover imagens não utilizadas que ainda possam ser necessárias.

### Remover volumes Docker

Volumes são **persistentes** e armazenam dados mesmo após a interrupção do contêiner associado. Esses volumes podem crescer ao longo do tempo e ocupar recursos desnecessários.

```bash
docker volume prune
```

Esse comando identifica todos os volumes que não estão mais associados a contêineres ativos. O Docker exibirá uma lista de volumes sugeridos para remoção. Além disso, será necessário confirmar a operação antes da exclusão definitiva. Por outro lado, `docker volume rm` é um comando que remove especificamente volumes individuais do Docker. Isso pode ser útil quando você sabe exatamente qual volume deseja remover, independentemente de estar sendo utilizado por um contêiner ou não. Para remover um volume Docker específico, use o comando `docker volume rm` seguido pelo nome ou ID do volume:

```bash
docker volume rm volume_name
```

Certifique-se de conhecer o nome exato ou o ID do volume antes de removê-lo, pois esse comando exclui permanentemente os dados e não pode ser desfeito.

### Remover redes Docker

No Docker, redes são um componente de comunicação fundamental entre contêineres, independentemente de estarem no mesmo host ou distribuídos em vários hosts. **Redes Docker** permanecem, mesmo depois que contêineres são encerrados ou removidos. Com o tempo, isso pode levar ao acúmulo de redes que não são mais utilizadas e ocupam recursos desnecessários. O comando `docker network prune` é uma maneira simples de identificar e remover essas redes sem uso.

O comando segue a seguinte estrutura:

```bash
docker network prune [OPTIONS]
```

O Docker gera uma lista de todas as redes que não estão mais em uso por contêineres ativos ou não são mais referenciadas. Em seguida, o Docker solicita a confirmação antes de remover as redes.

### Docker `prune`: Melhores práticas

- **Limpeza automatizada:** Use scripts ou ferramentas automatizadas para limpar regularmente imagens, contêineres e volumes do Docker que não são mais necessários. Isso mantém o ambiente organizado e otimiza o desempenho.
- **Patches de segurança e atualizações:** Certifique-se de que o Docker Engine, sistemas operacionais host e todas as imagens Docker sejam regularmente verificados e atualizados com patches de segurança para minimizar possíveis vulnerabilidades.
- **Monitoramento e registro:** Utilize ferramentas de monitoramento e *logging* para acompanhar o desempenho dos contêineres, detectar eventos inesperados e agir proativamente na manutenção.
- **Backup externo:** Implemente rotinas para backups externos de dados importantes dos contêineres do Docker. Isso pode ser feito através de backups regulares de bancos de dados ou arquivos de configuração.
- **Verificação manual antes da remoção:** Verifique cuidadosamente se você não precisa mais de certos recursos antes de removê-los. Isso minimiza o risco de perda acidental de dados ou interrupção de processos em execução.

Dica Se você está começando com o Docker, recomendamos nosso [tutorial Docker, sobre instalação e primeiros passos](https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/tutorial-docker/).


This is a markdown version of: [https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/docker-prune/](https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/docker-prune/) for AI/LLM consumption.