Files
learning/docker/010-volumi.md
2025-07-30 21:26:12 +02:00

2.8 KiB

Volumi

Per impostazione predefinita, tutte le operazioni eseguite all'interno di un container Docker vengono scritte in un layer scrivibile del container stesso. Questo approccio presenta due principali limitazioni: innanzitutto, i dati scritti in questo layer vengono persi quando il container viene eliminato; inoltre, tali dati sono strettamente legati a uno specifico container, rendendone difficile lo spostamento o la condivisione dei dati con altri container.

Docker offre due soluzioni per garantire la persistenza dei dati:

  • Bind mounts: consentono uno scambio bidirezionale tra una cartella (o un file) definita sull'host e una cartella (o file) defina all'interno del container. Questa soluzione è particolarmente utile quando si desidera rendere disponibili all'interno del container risorse presenti sull'host, come file di configurazione

  • Volumi: rappresentano il metodo migliore per garantire la persistenza dei dati. I volumi possono essere condivisi tra più container e offrono grande flessibilità, poiché non richiedono che il sistema host disponga di un path specifico da montare nel container. I volumi sono gestiti direttamente da Docker

I volumi, quando Docker è eseguito come utente root, sono mappati nella directory /var/lib/docker/volumes. Se Docker è eseguito in modalitá rootless, in /home/user/.local/share/docker/volumes, mentre con Podman sono localizzati in /home/user/share/containers/storage/volumes.

Comandi principali

Per creare un volume da associare successivamente a uno o più container, è disponibile il comando docker volume create. Questo comando genera un volume anonimo, identificato da un hash alfanumerico generato da Docker. Per creare un volume con un nome specifico, si utilizza il comando docker volume create volume_name.

I volumi sono entità indipendenti che possono esistere anche senza essere associati a un container.

A meno che non siano implementati limiti di quota, il volume crescerà in dimensione all'aumentare dei dati contenuti.

Elencare i volumi

Per visualizzare l'elenco dei volumi esistenti, esiste il comando docker volume ls.

Rimuovere i volumi

Per rimuovere tutti i volumi anonimi non in uso da alcun container, si utilizza il comando docker volume prune. Per eliminare tutti i volumi inutilizzati, si può utilizzare docker volume prune -a.

Ispezionare i volumi

Per ispezionare un volume specifico, si utilizza il comando docker volume inspect <volume_name> oppure docker volume inspect <hash>.

L'associazione tra il volume e il container che lo utilizza non è registrata nel volume stesso, ma nel container. In altre parole, il volume non riporta i suoi utilizzatori; sono i container a registrare il volume che utilizzano. Pertanto, per trovare l'associazione, si può utilizzare il comando docker inspect <container_name>.