Come funziona lo storage di Docker: Volumi vs Bind Mounts | INTROSERV
EUR
european

EUR

usa

USD

Italy It
Ex. VAT Ex. VAT 0%

Come funziona lo storage di Docker: Volumi vs Bind Mounts

Introduzione

In questo tutorial, imparerai come funziona lo storage di Docker e come mantenere i dati utilizzando Docker Volumes e Bind Mounts. Capirai anche le differenze chiave tra questi approcci e quando utilizzare ciascuno in produzione. Questo ti aiuterà a evitare la perdita di dati e a progettare sistemi containerizzati affidabili.

Prerequisiti

  • Pubblico target: Amministratori di sistema principianti
  • Tempo stimato: ~30 minuti
  • Sistema operativo: Qualsiasi OS con supporto Docker come Ubuntu 22.04+, Debian 12+, CentOS Stream o macOS con Docker Desktop
  • Software: Docker 24.0.0 o successivo
  • Permessi: Utente con accesso a Docker o privilegi sudo
  • Hardware: Almeno 2 GB di RAM e 10 GB di spazio libero su disco
  • Rete: Accesso a Internet per scaricare le immagini dei container
  • Conoscenze presunte: Uso base della riga di comando e comprensione dei container

Passo 1: Comprendere come funziona lo storage di Docker

I container Docker utilizzano un filesystem a strati. Ogni container ha uno strato scrivibile sopra gli strati di immagine in sola lettura.

Cosa succede quando un container scrive dati

  1. Docker memorizza gli strati di immagine come sola lettura
  2. Quando avvii un container, Docker aggiunge uno strato scrivibile
  3. Qualsiasi modifica ai file avviene solo in questo strato scrivibile

Risultato

Quando elimini un container, tutti i dati nello strato scrivibile vengono persi. Questo significa che lo storage del container è effimero per impostazione predefinita.

Info

Questo comportamento è utile per applicazioni senza stato ma non per database o servizi persistenti.

Passo 2: Creare e utilizzare Docker Volumes

I Docker Volumes sono posizioni di storage gestite create e mantenute da Docker.

Crea un volume

Esegui il seguente comando:

docker volume create my_volume

Dovresti vedere il nome del volume restituito.

Usa un volume in un container

Esegui il seguente comando:

docker run -d -v my_volume:/app/data --name volume_test busybox

Docker monta il volume all'interno del container in /app/data.

Risultato

I dati scritti in /app/data persistono anche se il container viene rimosso.

Caratteristiche chiave dei volumi

  • Gestiti da Docker
  • Memorizzati in directory interne di Docker come /var/lib/docker/volumes/
  • Facili da eseguire il backup e migrare
  • Isolati dalla struttura del filesystem dell'host

Tip

Usa i volumi per database e carichi di lavoro in produzione.

Passo 3: Creare e utilizzare Bind Mounts

I Bind Mounts collegano una directory specifica sull'host a una directory all'interno del container.

Usa un bind mount

Esegui il seguente comando:

docker run -d -v /home/<YOUR_USERNAME>/data:/app/data --name bind_test busybox

Risultato

Il container accede direttamente alla directory dell'host. Qualsiasi modifica nella directory dell'host è immediatamente visibile all'interno del container.

Caratteristiche chiave dei bind mounts

  • Dipendono dai percorsi del filesystem dell'host
  • Consentono la modifica diretta dei file dall'host
  • Nessun isolamento gestito da Docker
  • Più flessibili ma meno portabili

Info

I bind mounts riflettono immediatamente le modifiche tra host e container.

Passo 4: Confrontare Volumes e Bind Mounts

Comprendere le differenze ti aiuta a scegliere l'opzione giusta.

Docker Volumes

  • Gestiti da Docker
  • Portabili tra ambienti
  • Più sicuri per l'uso in produzione
  • Più facili da eseguire il backup
  • Astratti dal filesystem dell'host

Bind Mounts

  • Gestiti dall'host
  • Legati a percorsi specifici del filesystem
  • Utili per lo sviluppo
  • Forniscono accesso diretto ai file
  • Meno sicuri se configurati male

Passo 5: Scegliere tra Volumes e Bind Mounts in produzione

Usa le seguenti linee guida.

Quando usare Docker Volumes

  • Esecuzione di database come MySQL o PostgreSQL
  • Memorizzazione di dati applicativi che devono persistere
  • Distribuzione di servizi in produzione
  • Necessità di portabilità tra server

Quando usare Bind Mounts

  • Ambienti di sviluppo locale
  • Modifica diretta di codice o file di configurazione
  • Debug del comportamento del container
  • Impostazioni temporanee o di test

Info

Importante: I bind mounts possono esporre file sensibili dell'host ai container se configurati male. Verifica sempre percorsi e permessi.

Verifica e Test

Crea un container di test con un volume:

docker run -it -v my_volume:/data --name playground busybox

All'interno del container, crea un file:

echo test > /data/file.txt

Esci dal container e rimuovilo:

docker rm -f playground

Avvia un nuovo container con lo stesso volume:

docker run -it -v my_volume:/data --name playground busybox

Controlla il file:

cat /data/file.txt

Risultato atteso: Il file esiste ancora, confermando la persistenza dei dati.

Ripristino delle modifiche

Per pulire le risorse, esegui i seguenti comandi:

docker rm -f playground volume_test bind_test

docker volume rm my_volume

docker system prune -f

Info

Importante: Rimuovere i volumi elimina permanentemente tutti i dati memorizzati.

Risoluzione dei problemi

  • Problema: I dati scompaiono dopo il riavvio del container
    Causa: Nessun volume o bind mount utilizzato
    Soluzione: Allegare storage persistente utilizzando volumi o bind mounts
  • Problema: Errori di permesso negato
    Causa: Mismatch dei permessi della directory dell'host
    Soluzione: Regolare i permessi usando chmod o chown
  • Problema: Volume non montato correttamente
    Causa: Percorso o sintassi errati
    Soluzione: Verificare il formato del mount e i percorsi

Conclusione e Passi Successivi

Hai imparato come funziona lo storage di Docker e come mantenere i dati utilizzando volumi e bind mounts. Capisci anche quando utilizzare ciascun approccio in produzione. Successivamente, esplora Docker Compose per gestire applicazioni multi-container e definire lo storage in modo più strutturato.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA