Come spostare in modo sicuro i volumi Docker su una partizione più grande quando lo spazio è esaurito

Come spostare in modo sicuro i volumi Docker su una partizione più grande quando lo spazio è esaurito

Per impostazione predefinita, Docker organizza i suoi dati nella directory “/var/lib/docker” sulla partizione root. Con l’espansione di applicazioni e container, questa directory può rapidamente occupare spazio significativo. Sintomi come prestazioni del server ridotte, impossibilità di salvare i dati o crash casuali indicano spesso che la partizione root sta per raggiungere la piena capacità. Questa guida esplorerà strategie efficaci per spostare i volumi o i dati Docker su una partizione alternativa, alleviando così la pressione sulla partizione root.

L’importanza di spostare i volumi Docker

I container Docker generano spesso notevoli quantità di dati persistenti, che possono esaurire rapidamente la capacità di archiviazione della partizione root. Spostare i volumi Docker su una partizione diversa può offrire diversi vantaggi:

  • Liberare spazio sul file system root
  • Evita arresti anomali del sistema causati dalla mancanza di spazio su disco
  • Assegnare dati applicativi più grandi a soluzioni di archiviazione esclusive
  • Migliorare la gestione complessiva delle risorse di archiviazione

Ad esempio, contenitori di database come MySQL o PostgreSQL possono archiviare diversi gigabyte di dati. Il trasferimento di questi volumi su una partizione più spaziosa può migliorare significativamente la stabilità del sistema.

Come trovare la directory del volume Docker

Individuare la directory del volume Docker è un primo passo fondamentale prima di iniziare lo spostamento. Utilizza il comando seguente per elencare tutti i volumi Docker disponibili:

docker volume ls

Ispeziona i volumi Docker

Per recuperare informazioni dettagliate su un volume specifico, eseguire il seguente comando:

docker volume inspect volume_name

All’interno dell’output, individua il Mountpointcampo che indica la directory esatta in cui Docker conserva i dati del volume.

Ispeziona un volume Docker specifico

Come spostare l’intera radice dati Docker

Per trasferire tutti i dati Docker, inclusi volumi, immagini e log, su una partizione diversa, è possibile spostare l’intera directory di archiviazione Docker. Questo approccio completo garantisce che “/var/lib/docker” non si riempia.

Iniziare arrestando il servizio Docker per impedire modifiche ai file durante la migrazione:

sudo systemctl stop docker

Successivamente, utilizza il comando rsync per copiare i dati Docker:

sudo rsync -avxP /var/lib/docker/ /path/to/new/partition/docker-data/

Questo comando replicherà la directory Docker mantenendo le autorizzazioni e visualizzando l’avanzamento del trasferimento.

Copia dati Docker Rsync

Se hai bisogno di preservare attributi Docker aggiuntivi, puoi utilizzare questo comando avanzato:

sudo rsync -aHAX --info=progress2 /var/lib/docker/ /mnt/docker-data/

Questo comando è preferibile perché conserva più metadati del file system e fornisce indicazioni dettagliate sull’avanzamento.

Dopo il trasferimento, rinominare la directory dati precedente come backup:

sudo mv /var/lib/docker /var/lib/docker.old

Aggiorna la configurazione di Docker modificando il file daemon utilizzando:

sudo nano /etc/docker/daemon.json

Aggiungere la seguente configurazione:

{"data-root": "/path/to/new/partition/docker-data"}

Aggiorna la configurazione Docker

Successivamente, riavvia Docker eseguendo:

sudo systemctl start docker

Verificare che la directory dei dati Docker sia stata aggiornata correttamente con:

docker info | grep "Docker Root Dir"

Conferma la nuova directory dati di Docker

Se tutto sembra corretto, puoi procedere all’eliminazione del vecchio backup:

sudo rm -rf /var/lib/docker.old

Spostamento di tutti i dati Docker tramite Docker Desktop (metodo GUI)

Se preferisci un’interfaccia grafica, Docker Desktop ti consente di trasferire tutti i dati Docker modificando la posizione dell’immagine disco. Questo metodo sposta di fatto tutti i dati archiviati da Docker, inclusi immagini, container e volumi, in una nuova posizione.

Apri Docker Desktop, vai su Impostazioni, vai su RisorseAvanzate e individua l’ opzione Posizione immagine disco.

Posizione dell'immagine del disco

Selezionare Sfoglia per designare una directory sulla partizione preferita per l’archiviazione di Docker, ad esempio “/mnt/newdisk/docker-data”.Fare clic su Applica e riavvia per avviare il trasferimento dei dati.

Cambia partizione

Spostamento di dati di volume specifici

Per una maggiore flessibilità, è possibile spostare uno specifico volume Docker in una partizione diversa, utilizzandolo con il container tramite un mount host bind. Questo approccio è sicuro, semplice e semplifica i processi di backup. Iniziare arrestando il container che utilizza il volume:

docker stop container_name

Successivamente, utilizzare rsyncper trasferire i dati del volume in modo sicuro:

sudo rsync -a /var/lib/docker/volumes/my_volume/_data/ /data/docker/my_volume/

Questo comando trasferirà tutti i contenuti dal volume precedente a “/data/docker/my_volume”.

È necessario modificare il file “docker-compose.yml” in modo che rifletta un montaggio bind anziché un volume gestito da Docker:

services: my_service: volumes: - /data/docker/my_volume:/container/path

Assicurati di sostituire /container/pathcon il percorso di montaggio originale all’interno del contenitore. Ridistribuisci il contenitore utilizzando il seguente comando:

docker-compose up -d

Conclusione

Il trasferimento di volumi Docker o dell’intera directory dati Docker su una partizione più spaziosa può liberare notevolmente spazio sul file system di root, migliorando la stabilità del server. Questo approccio proattivo riduce al minimo il rischio di perdita di dati e semplifica la futura gestione dello storage.

Se spostare l’intera directory Docker risulta impraticabile, esistono altre opzioni per recuperare spazio, come utilizzare il docker system prunecomando per eliminare contenitori, immagini, reti e cache inutilizzati, oppure impiegare i mount bind di Linux per spostare directory sostanziali senza interrompere il funzionamento di Docker.

Fonte e immagini

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *