Come Copiare/Spostare un Contenitore Docker su un Altro Host

Poiché i contenitori Docker sono piccole scatole di software, puoi facilmente copiarli e spostarli da computer a computer. Potrebbe essere che tu abbia lavorato su un’istanza Docker sul tuo computer locale e abbia deciso di spostarla su un server più potente. Oppure magari vuoi semplicemente distribuire il tuo contenitore personalizzato su più computer, “copiandolo e incollandolo”. Altre volte, potresti essere insoddisfatto di un fornitore di cloud computing e desiderare di passare a uno diverso. Qui ti mostreremo come spostare la tua immagine di contenitore Docker esistente e i volumi di dati da un host Linux a un altro.
Indice
- Salva l’immagine del contenitore dall’host sorgente
- Esportazione di un volume Docker dal tuo contenitore
- Carica l’immagine del contenitore sull’host di destinazione
- Importazione di un volume Docker nel tuo contenitore
- Trasferisci l’immagine senza creare un file
- Utilizzare Docker Compose per spostare un’intera distribuzione Docker
Buono a sapere: inizia con i contenitori installando Docker sulla tua distribuzione Linux.
Salva l’immagine del contenitore dall’host sorgente
Inizia elencando i contenitori Docker disponibili in esecuzione sul tuo sistema. Nel mio caso, voglio esportare il mio contenitore Docker Nginx su una nuova macchina:
docker ps
Trova il contenitore che vuoi copiare, quindi ferma l’istanza:
docker stop NOME_DELL'ISTANZA
Un contenitore Docker è costruito a partire da un’immagine iniziale generica. Nel tempo, aggiungi le tue modifiche a quest’immagine di base. I processi in esecuzione all’interno del contenitore potrebbero anche salvare i propri dati o apportare altre modifiche. Per preservare tutto ciò, impegnati nello stato attuale del tuo contenitore creando una nuova immagine:
docker commit NOME_DELL'ISTANZA mycontainerimage
Nota che se l’istanza è attualmente in esecuzione, questa azione la metterà in pausa mentre il suo contenuto viene salvato. Se questo è un problema, puoi evitare questa pausa inserendo docker commit -p=false NOME_DELL'ISTANZA mycontainerimage al suo posto. Tuttavia, non farlo a meno che non sia assolutamente necessario. Le probabilità di creare un’immagine con dati inconsistenti/incompleti aumentano in questo caso.
Ora, salva la tua immagine di contenitore Docker appena impegnata in un file di archivio:
docker save -o mycontainerimage.tar mycontainerimageUtilizza il tuo metodo di trasferimento file preferito e copia il tuo file .tar sull’host dove desideri spostare il tuo contenitore Docker. Ad esempio, il seguente comando trasferisce la mia immagine Docker Nginx usando scp:
scp ./mycontainerimage.tar [email protected]:/home/ramces/Esportazione di un volume Docker dal tuo contenitore
Uno degli svantaggi di salvare un’immagine Docker è che non viene fornita con gli accessori Docker che hai impostato insieme al tuo contenitore. Questo include eventuali montaggi di rete e i volumi che hai creato per memorizzare i tuoi dati persistenti.
Per esportare correttamente il tuo volume di dati, prima installa Git sulla tua macchina locale:
sudo apt install gitEsegui il seguente comando per scaricare lo script di esportazione del volume per Docker:
git clone https://github.com/ricardobranco777/docker-volumes.sh.gitAssicurati che lo script di esportazione abbia i giusti permessi, quindi copialo nella directory “/usr/local/bin” della tua macchina:
sudo chmod +x ./docker-volumes.sh/docker-volumes.sh
sudo cp ./docker-volumes.sh/docker-volumes.sh /usr/local/bin/Testa se il tuo script funziona correttamente, quindi estrai tutti i volumi associati al tuo contenitore:
docker-volumes.sh -h
docker-volumes.sh NOME_DELL'ISTANZA save mycontainerimage-volume.tar
Invia i tuoi nuovi file di volume Docker archiviati alla tua macchina remota:
scp ./mycontainerimage-volume.tar [email protected]:/home/ramces/Carica l’immagine del contenitore sull’host di destinazione
Accedi al tuo host remoto, quindi esegui il seguente comando per caricarlo nel demone Docker della tua macchina remota:
docker load -i ./mycontainerimage.tarUtilizza docker create per reinizializzare la tua immagine di contenitore Docker con i suoi flag di esecuzione originali dalla tua macchina sorgente. Ad esempio, il mio contenitore Docker Nginx aveva originalmente la porta 80 mappata sulla porta 8080 della mia macchina host:
docker create --name my-nginx-container -p8080:80 mycontainerimageEsegui il tuo contenitore Docker appena importato:
docker start my-nginx-containerConferma che la tua immagine importata funzioni correttamente elencando tutti i contenitori attivi nel sistema:
docker ps
FYI: trasforma il tuo Raspberry Pi in una pratica galleria fotografica portatile installando Photoprism con Docker.
Importazione di un volume Docker nel tuo contenitore
Per importare un file di volume Docker .tar, prima scarica Git sul tuo nuovo host:
sudo apt install gitProprio come con il tuo sistema originale, scarica lo script helper docker-volume.sh, imposta i suoi permessi a “esecutivo” e poi copialo nella directory “/usr/local/bin” della tua nuova macchina.

Crea un nuovo contenitore Docker utilizzando il tuo file immagine esportato:
docker create --name my-nginx-container -v myvol:/usr/share/nginx/html -p8080:80 mycontainerimageEsegui lo script docker-volume.sh con il tuo file .tar originale per caricarlo nel demone Docker del tuo nuovo sistema:
docker-volumes.sh my-nginx-container load mycontainerimage-volume.tarAvvia il tuo nuovo contenitore Docker eseguendo il seguente comando:
docker start my-nginx-containerControlla se il tuo contenitore sta caricando correttamente il tuo volume controllando i suoi dati di configurazione interni:
docker inspect -f'{{ .Mounts }}' my-nginx-container
Trasferisci l’immagine senza creare un file
A volte potresti voler saltare la creazione di un file mycontainerimage.tar.gz. Forse non hai abbastanza spazio su disco poiché il contenitore ha un sacco di dati al suo interno. Puoi salvare, trasferire e caricare l’immagine sull’host di destinazione in un solo comando. Dopo aver eseguito il comando docker commit discusso sopra, puoi usare questo:
docker save mycontainerimage | ssh [email protected] docker loadDovrebbe funzionare anche da Windows, poiché ora ha un client SSH integrato (PuTTY non è più necessario).
Continua con il comando docker create che si applica alla tua situazione.
Nota: assicurati di aver montato correttamente eventuali volumi Docker che erano precedentemente allegati al tuo contenitore prima di avviare l’immagine importata.
Infine, avvia il tuo nuovo contenitore Docker eseguendo docker start seguito dal nome del tuo contenitore.

Utilizzare Docker Compose per spostare un’intera distribuzione Docker
Con il suo plugin Compose, Docker rende possibile costruire, configurare e eseguire programmi complessi senza preoccuparsi dello stack software sottostante del server. Questo, a sua volta, ti consente di costruire distribuzioni di applicazioni riproducibili su sistemi Linux diversi.
Per iniziare a migrare la tua attuale configurazione Docker a Docker Compose, prima assicurati che il suo plugin sia attualmente nel tuo sistema:
sudo apt install docker-compose-plugin docker-buildx-pluginCrea una nuova cartella nella tua directory home per la tua installazione Docker Compose:
mkdir ~/my-docker-compose && cd ~/my-docker-composeUsa il tuo editor di testo preferito per creare un file “docker-compose.yml” per la tua applicazione:
nano ./docker-compose.ymlIncolla il seguente blocco di codice all’interno del tuo file Compose, quindi modificalo secondo le tue esigenze specifiche:
version: '3'
volumes:
myvol: # Sostituisci con il nome del tuo volume importato.
services:
nginx:
image: mycontainerimage # Sostituisci con il nome della tua immagine Docker importata.
ports:
- "8080:80"
volumes:
- myvol:/usr/share/nginx/html # Sostituisci "myvol" con il nome della tua immagine montata.Salva il tuo nuovo file Compose, quindi esegui il seguente comando per avviarlo:
docker compose up -dInfine, verifica se la tua distribuzione Compose funziona correttamente. Nel mio caso, testerò il mio contenitore Docker Nginx aprendo un browser web e navigando su “localhost:8080.”

Imparare a copiare e spostare il tuo contenitore Docker su altri host Linux è solo uno dei pochi compiti che puoi fare con la tua macchina. Esplora questo meraviglioso mondo dell’auto-ospitare installando un server Minecraft su Linux usando Docker.