# Tutorial di Docker prune: sintassi ed esempi pratici

Docker `prune` **rimuove gli oggetti inutili** come container arrestati, volumi inutilizzati, reti o immagini vecchie. Così ottimizzi l’utilizzo del disco rigido e liberi spazio di archiviazione.

## Cos’è Docker `prune`?

Docker `prune` o `system prune` è utile per **pulire in modo sistematico** le risorse [Docker](https://www.ionos.it/digitalguide/server/know-how/cose-docker/) che non servono più, liberando spazio. Quando [container](https://www.ionos.it/digitalguide/server/know-how/container-docker/), immagini, reti e volumi di Docker restano inutilizzati a lungo, possono occupare inutilmente una considerevole quantità di spazio. Con `prune` puoi eliminare rapidamente le risorse, mantenendo il sistema pulito e performante.

In particolare negli **ambienti di sviluppo** in cui spesso vengono creati e testati nuovi container si può accumulare una grande quantità di oggetti obsoleti. Docker `prune` pulisce non solo i container e le immagini, ma anche le reti e i volumi che non servono più. Così è molto più semplice amministrare le risorse Docker e si riduce al minimo il rischio di avere un sistema disordinato e sovraccarico.

## Per cosa si usa Docker `prune`?

Il comando `prune` è adatto per diverse situazioni di lavoro quotidiano con Docker. Di seguito riportiamo quattro scenari tipici di utilizzo.

**Ottimizzazione dei processi di lavoro:** gli ambienti Docker sono spesso utilizzati in modo intensivo a scopi di sviluppo, test e produzione. Senza una pulizia regolare si accumulano rapidamente risorse inutili. Questo sovraccarico provoca non solo un aumento dello spazio necessario, ma può anche incidere negativamente sulle prestazioni del sistema. Rimuovendo le risorse inutilizzate, Docker `prune` consente un utilizzo più efficiente delle risorse di sistema. È importante soprattutto negli ambienti basati sul cloud, dove i costi salgono con l’aumentare del fabbisogno di risorse di archiviazione e di calcolo.

**Aumento della sicurezza**: le risorse Docker superflue e obsolete possono comportare rischi per la sicurezza. Docker `prune` rimuove i container, le immagini, le reti e i volumi inutilizzati, limitando il rischio che componenti obsoleti e potenzialmente non sicuri restino senza protezione. Un ecosistema Docker pulito contribuisce a minimizzare la superficie di attacco e a migliorare le condizioni di sicurezza dell’intera infrastruttura IT.

**Incremento delle prestazioni:** un ambiente Docker sovraccarico può compromettere il rendimento del sistema, sollecitando inutilmente risorse come la CPU e la memoria. Una pulizia regolare con Docker `prune` libera spazio e aumenta l’efficienza dell’amministrazione e dell’esecuzione dei container. Ne conseguono tempi di caricamento notevolmente ridotti, una distribuzione molto più rapida delle applicazioni e, in generale, una migliore capacità di reazione del sistema.

**Manutenzione più semplice:** eseguendo regolarmente Docker `prune` semplifichi considerevolmente la manutenzione del tuo ambiente Docker. Rimuovere le risorse inutilizzate riduce la complessità delle attività di manutenzione per gli sviluppatori e le sviluppatrici. Consente inoltre di mantenere più facilmente una visione d’insieme sui componenti Docker attivi e rilevanti, accelerando la diagnosi e l’eliminazione degli errori. In questo modo, non solo si risparmia tempo per l’amministrazione: i team possono concentrarsi sullo sviluppo e sul miglioramento delle loro applicazioni anziché dover fare i conti con risorse superflue.

## Sintassi: come si usa Docker `prune`?

Vorresti ripulire le risorse nel tuo **ambiente Docker** per liberare spazio di archiviazione e semplificare l’amministrazione? In questo caso ti basta eseguire il comando seguente per accedere ai servizi di `prune`:

```bash
docker system prune
```

Per impostazione predefinita i container arrestati e le immagini, le reti e i volumi non più utilizzati vengono identificati, proponendone poi l’eliminazione. Docker ti chiede di confermare l’operazione. Inserisci `y` e premi il tasto Invio. In alternativa puoi usare direttamente anche l’opzione `-f` per saltare la conferma ed eseguire subito l’eliminazione:

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

**Consiglio**: prima di usare Docker `prune` è utile controllare le risorse Docker correntemente presenti sul sistema. Esegui i comandi seguenti per ottenere una lista di tutti i container, immagini, reti e volumi:

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

### Opzioni di Docker `prune`

Nella tabella che segue trovi un riepilogo delle varie opzioni di `docker system prune`.

<table>
  <thead>
    <tr>
      <th>Opzione</th>
      <th>Descrizione</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`--all, -a`</td>
      <td>Rimuove tutte le risorse Docker inutilizzate.</td>
    </tr>
    <tr>
      <td>`--force, -f`</td>
      <td>Esegue la pulizia senza richiedere la conferma dell’utente.</td>
    </tr>
    <tr>
      <td>`--volumes`</td>
      <td>Rimuove i volumi inutilizzati.</td>
    </tr>
    <tr>
      <td>`--filter, -f`</td>
      <td>Consente di filtrare per criteri le risorse da eliminare.</td>
    </tr>
    <tr>
      <td>`--help`</td>
      <td>Visualizza una guida per l’uso del comando.</td>
    </tr>
  </tbody>
</table>

## Docker `prune`: tutorial sull’utilizzo pratico del comando

Docker mette a disposizione vari comandi per eseguire una pulizia mirata di determinati tipi di risorse. Puoi così controllare con precisione quali risorse eliminare.

### Docker `prune --filter`

Puoi applicare **filtri** per gestire la selezione delle risorse da eliminare, ad esempio container, immagini, reti e volumi. Sono utili negli ambienti di sviluppo dove si creano e dimenticano rapidamente tante risorse temporanee.

**La sintassi generale si presenta come segue:**

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

**Tra la varie opzioni di filtro troviamo:**

- `until`: filtra le risorse in base alla data di creazione. `<duration>` può essere un valore numerico come `h` (ore), `m` (minuti) o `s` (secondi).

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

**Esempio:** rimuovere tutti i container arrestati che sono più vecchi di 24 ore

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

- `label`: filtra le risorse in base all’etichetta Docker.

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

**Esempio:** eliminare tutti i volumi inutilizzati che contengono l’etichetta `mylabel`

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

- `dangling`: filtra le risorse che non sono più usate da un container

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

**Esempio:** rimuovere tutte le immagini non più utilizzate (dangling)

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

Oltre ai filtri principali indicati sopra sono disponibili anche opzioni di filtro più specifiche, a seconda del tipo di risorsa:

- `before` e `since` per le immagini: filtra le immagini in base alla data di creazione, prima o dopo un determinato momento.
- `exited` per i container: filtra i container in base al loro stato Exit (ad esempio `exited=0` per i container terminati correttamente).

### Rimuovere risorse Docker

**Primo passaggio:** apri un terminale o una riga di comando nel tuo sistema.

**Secondo passaggio:** esegui Docker `prune` per pulire il sistema:

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

Sostituisci `{resource}` con il tipo di risorse che desideri eliminare. I valori validi sono `container`, `image`, `volume` e `network`.

### Rimuovere container Docker

Per impostazione predefinita **Docker non libera automaticamente i container** al termine del loro ciclo di vita. Per mettere a disposizione dei container in esecuzione le risorse bloccate è quindi importante controllare regolarmente i container arrestati e se necessario eliminarli. Per farlo sono previsti due metodi.

- `docker rm`: il comando `docker rm` è pensato per **eliminare manualmente** uno o più container Docker. È quindi adatto se sai con precisione quali container devono essere eliminati. Dovrai indicare esplicitamente gli ID o i nomi dei container da rimuovere. Saranno eliminati dal tuo ambiente solo determinati container, senza intaccare gli altri.

Di seguito un esempio per eliminare i container denominati `container1` e `container2`:

```bash
docker rm container1 container2
```

- `docker container prune`: il comando `docker container prune` permette invece di **eliminare più container arrestati in una volta sola**. Questo metodo è particolarmente adatto per liberare spazio in modo rapido ed efficiente, perché elimina tutti i container arrestati per cui non sono in corso processi.

```bash
docker container prune
```

Vengono elencati tutti i container arrestati. Docker ti chiederà conferma prima di procedere all’eliminazione. È estremamente pratico negli ambienti in cui vengono creati molti container temporanei che successivamente non serviranno più.

Per l’amministrazione e la manutenzione quotidiane del tuo ambiente Docker è consigliabile usare `docker container prune` **regolarmente** per eliminare in automatico i container arrestati. In questo modo, oltre a risparmiare tempo, ti assicuri che risorse inutili non compromettano le prestazioni del sistema. `docker rm`, invece, serve a eliminare determinati container in modo mirato e controllato, a prescindere che si tratti di test, sviluppo o altri requisiti specifici.

### Rimuovere immagini Docker

Le [immagini Docker](https://www.ionos.it/digitalguide/server/know-how/immagine-docker/) sono gli elementi costitutivi dei container. Nel corso del tempo possono avere diverse versioni e tag. Quando crei o aggiorni nuove immagini, spesso le immagini vecchie o non più utilizzate vengono mantenute. Queste immagini sospese (“**dangling**”) occupano spazio di archiviazione sul tuo sistema e possono comprometterne le prestazioni, in particolare se presenti in numero elevato.

Con Docker `prune` puoi identificare le immagini non più utilizzate e rimuoverle:

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

Le **opzioni** possibili sono ad esempio:

- `-a`, `--all`: questa opzione non solo rimuove le immagini dangling, ma anche quelle non più in uso. Le immagini inutilizzate sono quelle che non hanno più tag, pertanto non è più possibile fare riferimento direttamente a esse con i tag.

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

- `-f`, `--force`: per impostazione predefinita Docker richiede una conferma prima di eliminare effettivamente le immagini. Con `-f` o `--force` puoi saltare questo passaggio di conferma ed eseguire subito la pulizia.

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

### Rimuovere tutte le immagini Docker

Puoi anche eliminare dal tuo sistema le immagini Docker che non servono più con una sola operazione. Per usare efficacemente Docker `prune`, per prima cosa apri il terminale o il prompt e inserisci il comando seguente:

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

Prima di procedere con la pulizia assicurati di aver compreso quali immagini devono essere eliminate. L’opzione `-a` può eliminare anche immagini non in uso, ma che potrebbero servire ancora.

### Rimuovere volumi Docker

I volumi sono **persistenti** e salvano dati anche quando il relativo container non è più in esecuzione. Col passare del tempo, questi volumi possono crescere di dimensioni, occupando risorse inutilmente.

```bash
docker volume prune
```

Questo comando cerca tutti i volumi per cui non ci sono più container attivi. Ottieni così una lista con i volumi per cui è proposta l’eliminazione. Prima dell’effettiva cancellazione è richiesta la conferma.

Invece, `docker volume rm` è un comando che rimuove singoli volumi Docker in modo mirato. Può essere utile se sai esattamente quale volume eliminare, a prescindere che sia usato da un container o meno. Per rimuovere un determinato volume Docker usa il comando `docker volume rm` seguito dal nome o dall’ID del volume:

```bash
docker volume rm volume_name
```

Assicurati anche di conoscere il nome preciso o l’ID del volume da eliminare: questo comando cancella i dati in modo permanente e non può essere annullato.

### Rimuovere reti Docker

In Docker le reti sono un componente di base attraverso cui i container comunicano fra loro, a prescindere che si trovino sullo stesso host o siano distribuiti tra più host. Le **reti Docker** vengono mantenute anche quando i container sono stati chiusi o rimossi. Col passare del tempo può quindi succedere che si accumulino reti che non sono più in uso, occupando risorse inutilmente. Il comando `docker prune network` offre un modo semplice per individuare le reti inutilizzate e rimuoverle.

Il comando ha la forma seguente:

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

Docker genera una lista di tutte le reti che non sono più usate dai container attivi o che sono prive di riferimenti. Dopo aver richiesto la conferma, procede all’effettiva eliminazione delle reti.

### Docker `prune`: le migliori prassi

- **Pulizia automatizzata:** usa strumenti o script automatizzati per eliminare le immagini, i container e i volumi Docker che non servono più. Così l’ambiente resta ordinato e le prestazioni vengono ottimizzate.
- **Patch di sicurezza e aggiornamenti:** controlla regolarmente se ci sono patch di sicurezza e aggiornamenti per i motori Docker, i sistemi operativi host e tutte le immagini Docker. Così ridurrai al minimo le potenziali falle di sicurezza.
- **Monitoraggio e registrazione:** usa strumenti di monitoraggio e registrazione per tenere sotto controllo le prestazioni dei container, riconoscere gli eventi imprevisti e favorire la proattività nella manutenzione.
- **Backup esterno:** implementa routine per eseguire backup esterni dei dati importanti dei container Docker, ad esempio salvando regolarmente i contenuti del database o i file di configurazione.
- **Controllo manuale prima dell’eliminazione:** controlla attentamente di non aver più bisogno delle risorse prima di eliminarle. Così minimizzi il rischio di perdite accidentali di dati o di interruzioni dei processi in corso.

Consiglio Se hai appena iniziato a usare Docker, ti consigliamo il nostro [tutorial su Docker](https://www.ionos.it/digitalguide/server/configurazione/tutorial-di-docker/).


This is a markdown version of: [https://www.ionos.it/digitalguide/server/configurazione/docker-prune/](https://www.ionos.it/digitalguide/server/configurazione/docker-prune/) for AI/LLM consumption.