Comment copier/déménager un conteneur Docker vers un autre hôte

Puisque les conteneurs Docker sont de petites boîtes de logiciels, vous pouvez facilement les copier et les déplacer d’un ordinateur à un autre. Il se peut que vous ayez travaillé sur une instance Docker sur votre ordinateur local et décidé de la déplacer vers un serveur plus puissant. Ou peut-être que vous souhaitez simplement déployer votre conteneur personnalisé sur plusieurs ordinateurs, en le “copiant et en le collant”. D’autres fois, vous pourriez être mécontent d’un fournisseur de cloud computing et vouloir passer à un autre. Ici, nous vous montrons comment déplacer l’image de votre conteneur Docker existant et les volumes de données d’un hôte Linux à un autre.
Table des matières
- Sauvegarder l’image du conteneur depuis l’hôte source
- Exporter un volume Docker de votre conteneur
- Charger l’image du conteneur sur l’hôte de destination
- Importer un volume Docker dans votre conteneur
- Transférer l’image sans créer de fichier
- Utiliser Docker Compose pour déplacer un déploiement Docker entier
Bon à savoir : commencez avec les conteneurs en installant Docker sur votre distribution Linux.
Sauvegarder l’image du conteneur depuis l’hôte source
Commencez par lister les conteneurs Docker disponibles en cours d’exécution sur votre système. Dans mon cas, je veux exporter mon conteneur Docker Nginx vers une nouvelle machine :
docker ps
Trouvez le conteneur que vous souhaitez copier, puis arrêtez l’instance :
docker stop NOM_DE_L_INSTANCE
Un conteneur Docker est construit à partir d’une image de base générique. Au fil du temps, vous ajoutez vos propres modifications à cette image de base. Les processus s’exécutant à l’intérieur du conteneur peuvent également enregistrer leurs propres données ou effectuer d’autres modifications. Pour préserver tout cela, engagez l’état actuel de votre conteneur dans une nouvelle image :
docker commit NOM_DE_L_INSTANCE monimageconteneur
Notez que si l’instance est en cours d’exécution, cette action la mettra en pause pendant que son contenu est enregistré. Si cela pose problème, vous pouvez éviter cette pause en saisissant docker commit -p=false NOM_DE_L_INSTANCE monimageconteneur à la place. Cependant, ne le faites pas à moins que ce ne soit absolument nécessaire. Les chances de créer une image avec des données incohérentes/incomplètes augmentent dans ce cas.
Maintenant, sauvegardez votre nouvelle image de conteneur Docker engagée dans un fichier d’archive :
docker save -o monimageconteneur.tar monimageconteneurUtilisez votre méthode de transfert de fichier préférée et copiez votre fichier .tar vers l’hôte où vous souhaitez déplacer votre conteneur Docker. Par exemple, la commande suivante transfère mon image Docker Nginx en utilisant scp :
scp ./monimageconteneur.tar [email protected]:/home/ramces/Exporter un volume Docker de votre conteneur
Un des inconvénients de sauver une image Docker est qu’elle ne vient pas avec les accessoires Docker que vous avez configurés à côté de votre conteneur. Cela inclut tous les montages de liaison réseau et les volumes que vous avez créés pour stocker vos données persistantes.
Pour exporter correctement votre volume de données, commencez par installer Git sur votre machine locale :
sudo apt install gitExécutez la commande suivante pour télécharger le script d’exportation de volume pour Docker :
git clone https://github.com/ricardobranco777/docker-volumes.sh.gitAssurez-vous que le script d’exportation a les bons bits de permission, puis copiez-le dans le répertoire “/usr/local/bin” de votre machine :
sudo chmod +x ./docker-volumes.sh/docker-volumes.sh
sudo cp ./docker-volumes.sh/docker-volumes.sh /usr/local/bin/Testez si votre script fonctionne correctement, puis extrayez tous les volumes associés à votre conteneur :
docker-volumes.sh -h
docker-volumes.sh NOM_DE_L_INSTANCE save monimageconteneur-volume.tar
Envoyez vos nouveaux fichiers de volume Docker archivés à votre machine distante :
scp ./monimageconteneur-volume.tar [email protected]:/home/ramces/Charger l’image du conteneur sur l’hôte de destination
Connectez-vous à votre hôte distant, puis exécutez la commande suivante pour la charger sur le démon Docker de votre machine distante :
docker load -i ./monimageconteneur.tarUtilisez docker create pour réinitialiser votre image de conteneur Docker avec ses drapeaux d’exécution originaux de votre machine source. Par exemple, mon conteneur Docker Nginx avait à l’origine le port 80 lié au port 8080 de ma machine hôte :
docker create --name mon-conteneur-nginx -p 8080:80 monimageconteneurExécutez votre nouveau conteneur Docker importé :
docker start mon-conteneur-nginxConfirmez que votre image importée fonctionne correctement en listant tous les conteneurs actifs dans le système :
docker ps
FYI : transformez votre Raspberry Pi en une galerie de photos portable capable en installant Photoprism avec Docker.
Importer un volume Docker dans votre conteneur
Pour importer un fichier de volume Docker .tar, commencez par télécharger Git sur votre nouvel hôte :
sudo apt install gitTout comme avec votre système d’origine, téléchargez le script d’assistance docker-volume.sh, définissez ses bits de permissions sur “exécuter”, puis copiez-le dans le répertoire “/usr/local/bin” de votre nouvelle machine.

Créez un nouveau conteneur Docker en utilisant votre fichier image exporté :
docker create --name mon-conteneur-nginx -v monvol:/usr/share/nginx/html -p 8080:80 monimageconteneurExécutez le script docker-volume.sh avec votre fichier .tar d’origine pour le charger dans le démon Docker de votre nouveau système :
docker-volumes.sh mon-conteneur-nginx load monimageconteneur-volume.tarDémarrez votre nouveau conteneur Docker en exécutant la commande suivante :
docker start mon-conteneur-nginxTestez si votre conteneur charge correctement votre volume en examinant ses données de configuration internes :
docker inspect -f '{{ .Mounts }}' mon-conteneur-nginx
Transférer l’image sans créer de fichier
Parfois, vous souhaiterez peut-être éviter de créer un fichier monimageconteneur.tar.gz. Peut-être que vous n’avez pas suffisamment d’espace disque puisque le conteneur contient beaucoup de données. Vous pouvez sauvegarder, transférer et charger l’image sur l’hôte de destination en une seule commande. Après avoir exécuté la commande docker commit discutée ci-dessus, vous pouvez utiliser ceci :
docker save monimageconteneur | ssh [email protected] docker loadCela devrait fonctionner depuis Windows également, car il dispose maintenant d’un client SSH intégré (PuTTY n’est plus nécessaire).
Continuez avec la commande docker create qui s’applique à votre situation.
Note : Assurez-vous que vous avez correctement monté tout volume Docker qui était précédemment attaché à votre conteneur avant de démarrer l’image importée.
Enfin, démarrez votre conteneur Docker importé en exécutant docker start suivi du nom de votre conteneur.

Utiliser Docker Compose pour déplacer un déploiement Docker entier
Avec son plugin Compose, Docker permet de construire, configurer et exécuter des programmes complexes sans se soucier de la stack logicielle sous-jacente du serveur. Cela permet également de créer des déploiements d’application reproductibles à travers différents systèmes Linux.
Pour commencer à migrer votre configuration Docker existante vers Docker Compose, assurez-vous d’abord que son plugin est actuellement installé sur votre système :
sudo apt install docker-compose-plugin docker-buildx-pluginCréez un nouveau dossier dans votre répertoire personnel pour votre installation Docker Compose :
mkdir ~/mon-docker-compose && cd ~/mon-docker-composeUtilisez votre éditeur de texte préféré pour créer un fichier “docker-compose.yml” pour votre application :
nano ./docker-compose.ymlCollez le bloc de code suivant dans votre fichier Compose, puis modifiez-le selon vos besoins spécifiques :
version: '3'
volumes:
monvol: # Remplacez par le nom de votre volume importé.
services:
nginx:
image: monimageconteneur # Remplacez par le nom de votre image Docker importée.
ports:
- "8080:80"
volumes:
- monvol:/usr/share/nginx/html # Remplacez "monvol" par le nom de votre image montée.Enregistrez votre nouveau fichier Compose, puis exécutez la commande suivante pour le démarrer :
docker compose up -dEnfin, testez si votre déploiement Compose fonctionne correctement. Dans mon cas, je vais tester mon conteneur Docker Nginx en ouvrant un navigateur web et en naviguant vers “localhost:8080”.

Apprendre à copier et déplacer votre conteneur Docker vers d’autres hôtes Linux est juste une des nombreuses tâches que vous pouvez effectuer avec votre machine. Explorez ce merveilleux monde de l’auto-hébergement en installant un serveur Minecraft sur Linux à l’aide de Docker.
Crédit image : Max Duzij via Unsplash. Toutes les modifications et captures d’écran par Ramces Red.