# 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 ` oppure `docker volume inspect `. 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 `.