# Docker prune: tutorial sobre a sintaxe e exemplos

O Docker `prune` é utilizado para **eliminar objetos desnecessários**, como contentores inativos, volumes em desuso, redes antigas ou imagens. Desta forma, é possível otimizar a utilização do disco e libertar espaço de armazenamento.

## O que é o Docker `prune`?

Os comandos Docker `prune` e `system prune` são utilizados para **limpar sistematicamente** os recursos do Docker de que já não necessita e libertar espaço de armazenamento. Quando as imagens, redes, volumes e contentores do Docker permanecem sem utilização durante algum tempo, podem ocupar uma grande quantidade de espaço. O comando `prune` permite-lhe eliminar rapidamente esses recursos que estão sem utilização, para que mantenha o seu sistema organizado e a funcionar com eficiência.

Em **ambientes de desenvolvimento** onde é comum criar e testar contentores, é muito frequente acumular-se uma grande quantidade de objetos obsoletos. O Docker `prune` não só limpa contentores e imagens, como também redes e volumes de que já não necessita, o que facilita consideravelmente a gestão dos recursos do Docker e evita que o sistema fique desorganizado e sobrecarregado.

## Para que serve o Docker `prune`?

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

**Para otimizar os processos de trabalho**: os ambientes Docker são frequentemente utilizados para desenvolvimento, testes e produção. Se não forem limpos com frequência, acumulam-se recursos que sobrecarregam o espaço de armazenamento e afetam o desempenho do sistema. Ao utilizar o Docker `prune` para eliminar esses recursos não utilizados, o sistema é otimizado, o que é muito benéfico em ambientes baseados na nuvem, nos quais os custos aumentam à medida que é necessária mais capacidade de armazenamento e potência de processamento.

**Para melhorar a segurança**: os recursos do Docker obsoletos ou desnecessários podem representar riscos de segurança. O Docker `prune` elimina contentores, imagens, redes e volumes que não estão a ser utilizados, reduzindo assim o risco de componentes desatualizados e potencialmente inseguros ficarem expostos. Manter um ecossistema Docker organizado ajuda a minimizar a superfície de ataque e melhora a segurança de toda a infraestrutura informática.

**Para melhorar o desempenho**: quando o ambiente Docker está sobrecarregado, recursos como a CPU e a memória são consumidos desnecessariamente, o que afeta o desempenho do sistema. Ao realizar limpezas frequentes com o Docker `prune`, liberta-se espaço e melhora-se a eficiência na gestão e execução de contentores, o que se traduz em tempos de carregamento mais curtos, implementações mais rápidas de aplicações e, em geral, uma maior capacidade de resposta do sistema.

**Para uma manutenção mais fácil**: a execução frequente do Docker `prune` facilita consideravelmente a manutenção do ambiente Docker. Ao eliminar recursos não utilizados, as tarefas de gestão tornam-se menos complicadas para os programadores. Além disso, torna-se mais fácil manter o controlo sobre os componentes Docker ativos e relevantes, pelo que é possível detetar e resolver problemas mais rapidamente. Desta forma, as equipas podem concentrar-se no desenvolvimento e na melhoria das suas aplicações, em vez de terem de lidar com recursos desnecessários.

## Sintaxe: como se utiliza o Docker `prune`?

Tem um **ambiente Docker** e pretende eliminar recursos para libertar espaço e simplificar a gestão? Nesse caso, basta aceder aos serviços do `prune` executando este comando:

```bash
docker system prune
```

Por predefinição, o Docker identifica os contentores parados, as imagens não utilizadas, as redes e os volumes sem uso, e solicita confirmação para os eliminar. Digite `y` e prima Enter para o fazer. Caso contrário, pode usar a opção `-f` para ignorar a confirmação e iniciar diretamente a limpeza:

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

**Recomendação**: antes de utilizar o Docker `prune`, recomendamos que verifique quais os recursos do Docker que se encontram atualmente no sistema. Utilize os seguintes comandos para obter uma lista de todos os contentores, imagens, redes e volumes:

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

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

Apresentamos a seguir uma tabela com as opções disponíveis para o comando `docker system prune`:

<table>
  <thead>
    <tr>
      <th>Opção</th>
      <th>Descrição</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`--all, -a`</td>
      <td>Elimina todos os recursos Docker não utilizados.</td>
    </tr>
    <tr>
      <td>`--force, -f`</td>
      <td>Executa a limpeza sem confirmação do utilizador.</td>
    </tr>
    <tr>
      <td>`--volumes`</td>
      <td>Elimina volumes não utilizados.</td>
    </tr>
    <tr>
      <td>`--filter, -f`</td>
      <td>Permite filtrar, com base em critérios, os recursos a eliminar.</td>
    </tr>
    <tr>
      <td>`--help`</td>
      <td>Fornece ajuda para utilizar o comando.</td>
    </tr>
  </tbody>
</table>

## Docker `prune`: tutorial sobre como utilizar o comando

No Docker, é possível utilizar vários comandos para realizar uma limpeza específica de determinados tipos de recursos. Desta forma, pode controlar exatamente quais os recursos que vai eliminar.

### Docker `prune --filter`

É possível utilizar **filtros** para controlar quais os recursos a eliminar, sejam eles contentores, imagens, redes ou volumes. Esta funcionalidade é especialmente útil em ambientes de desenvolvimento, onde é comum criar e esquecer rapidamente muitos recursos temporários.

Em geral, utiliza-se esta **sintaxe**:

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

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).

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

**Exemplo:** eliminar todos os contentores em espera há mais de 24 horas.

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

- `label`: filtra recursos com base nas suas etiquetas do Docker.

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

**Exemplo:** limpar todos os volumes não utilizados que tenham a etiqueta `mylabel`.

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

- `dangling`: filtra os recursos que já não estão associados a nenhum contentor.

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

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

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

Para além dos filtros mencionados, existem também opções de filtros mais específicos, 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 específico.
- `exited` para contentores: filtra os contentores de acordo com o seu estado de saída (por exemplo, `exited=0` para contentores que terminaram corretamente).

### Eliminar recursos do Docker

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

**Passo 2**: execute o comando `docker`prune`` para limpar o sistema:

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

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

### Eliminar contentores Docker

Por predefinição, **o Docker não liberta automaticamente os contentores** quando estes terminam o seu ciclo de vida. Por isso, é importante verificar regularmente os contentores parados e eliminá-los, se necessário, pois assim os recursos bloqueados são libertados e ficam disponíveis para os contentores em execução. A seguir, descrevemos dois métodos para o fazer:

- `docker rm`: este comando foi concebido para **eliminar manualmente** um ou vários contentores Docker, pelo que é a opção mais adequada se souber quais os contentores que pretende eliminar. Deve especificar os IDs ou os nomes dos contentores que pretende eliminar, para que possa eliminar apenas determinados contentores sem afetar os restantes.

Aqui está um exemplo para eliminar os contentores com os nomes `container1` e `container2`:

```bash
docker rm container1 container2
```

- `docker container prune`: este comando foi concebido para **eliminar de uma só vez vários contentores parados**. Esta opção é ideal para libertar espaço de forma rápida e eficiente, eliminando todos os contentores parados que não tenham processos em execução.

```bash
docker container prune
```

Este comando lista todos os contentores parados e solicita a sua confirmação antes de os eliminar, o que se revela especialmente útil em ambientes onde são criados muitos contentores temporários que, posteriormente, já não são necessários.

Para a gestão e manutenção diárias do seu ambiente Docker, recomendamos que utilize **frequentemente o comando** `docker container prune` para que os contentores parados sejam eliminados automaticamente. Isto irá ajudá-lo a poupar tempo e garantir que não existem recursos desnecessários que possam prejudicar o desempenho do sistema. Por outro lado, `docker rm` é ideal quando é necessário eliminar apenas determinados contentores, seja para testes, desenvolvimento ou outros requisitos.

### Eliminar imagens do Docker

As imagens do Docker são a base dos contentores. Com o tempo, podem acumular-se muitas versões e etiquetas. Ao criar ou atualizar novas imagens, ficam frequentemente imagens antigas ou não utilizadas (as chamadas «dangling»), que ocupam espaço no seu sistema e podem afetar o desempenho, sobretudo se forem em grande quantidade.

O Docker `prune` permite identificar e eliminar imagens que já não são utilizadas da seguinte forma:

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

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 utilizadas. As imagens não utilizadas são aquelas que já não têm tags e, por isso, não podem ser referenciadas diretamente por tags.

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

- `-f`, `--force`: por predefinição, o Docker solicita uma confirmação antes de eliminar as imagens. Através dos passos `-f` ou `--force`, podes ignorar essa etapa de confirmação e proceder diretamente à eliminação.

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

### Eliminar todas as imagens do Docker

Também podes eliminar rapidamente todas as imagens do Docker de que já não precisas. Para utilizar o Docker `prune` corretamente, abre primeiro o terminal ou a linha de comandos e digita o seguinte:

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

Certifique-se de identificar quais as imagens que serão eliminadas antes de iniciar a limpeza. A opção `-a` também pode eliminar imagens não utilizadas de que ainda possa precisar.

### Eliminar volumes do Docker

Os volumes são **persistentes** 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 desnecessários.

```bash
docker volume prune
```

Este comando procura todos os volumes nos quais já não existem contentores ativos. Será apresentada uma lista de volumes que se sugere eliminar e será solicitada uma confirmação antes de prosseguir com a limpeza.

Por outro lado, o comando `docker volume rm` elimina diretamente volumes específicos do Docker, uma opção útil quando sabe exatamente qual o volume que pretende eliminar, independentemente de este estar a ser utilizado por um contentor ou não. Para eliminar um volume específico do Docker, utilize o comando `docker volume rm` seguido do nome ou do ID do volume:

```bash
docker volume rm volume_name
```

Este comando elimina os dados de forma definitiva, pelo que deve certificar-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 componente fundamental para a comunicação entre contentores, quer estes se encontrem no mesmo anfitrião ou distribuídos por vários. Estas redes permanecem ativas mesmo depois de os contentores serem parados ou eliminados. Com o tempo, podem acumular-se redes que já não são utilizadas e que ocupam recursos desnecessários. O comando `docker prune network` é uma forma simples de identificar e eliminar essas redes que já não estão em uso.

Este é o comando:

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

O Docker gera uma lista de todas as redes que já não são utilizadas por contentores ativos ou que já não estão referenciadas. Em seguida, solicita uma confirmação antes de as eliminar.

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

- **Automatização da limpeza**: implemente scripts ou ferramentas automatizadas para eliminar regularmente imagens, contentores e volumes Docker não utilizados. Desta forma, manterá o ambiente limpo e otimizará o desempenho.
- **Patches de segurança e atualizações**: certifique-se de que os motores Docker, os sistemas operativos do host e todas as imagens Docker sejam verificados e atualizados regularmente para minimizar as vulnerabilidades.
- **Monitorização e registo**: utilize ferramentas de monitorização e registo para supervisionar o desempenho dos contentores, detetar eventos inesperados e promover a proatividade na manutenção.
- **Cópias de segurança externas**: estabeleça rotinas para realizar cópias de segurança externas de dados importantes dos contentores Docker, por exemplo, fazendo de vez em quando cópias de segurança de conteúdos de bases de dados ou ficheiros de configuração.
- **Verificação manual antes da eliminação**: verifique cuidadosamente se realmente não necessita de determinados recursos antes de**os** eliminar. Desta forma, haverá menos risco de perder dados que não pretendia apagar ou de ocorrerem interrupções em processos em curso.

Dica Se acabou de começar a trabalhar com o Docker e precisa de aprender o básico, recomendamos [o](https://www.ionos.com/pt-pt/digitalguide/servidores/configuracao/tutorial-do-docker-instalacao-e-primeiros-passos/) nosso [tutorial sobre o Docker](https://www.ionos.com/pt-pt/digitalguide/servidores/configuracao/tutorial-do-docker-instalacao-e-primeiros-passos/).


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