Recherche de site Web

Comment j'ai déplacé mon serveur Docker vers un nouveau système


Avez-vous déjà envisagé de déplacer vos conteneurs Docker d'un serveur à un autre ? J'ai récemment eu l'idée de mettre à niveau mon homelab, en retirant un ancien serveur monté en rack au profit d'un système plus récent et plus puissant - mais déplacer mes conteneurs Docker était un défi que je ne savais pas comment relever.

En fait, ce n'était pas si difficile à faire, et c'était plus chronophage que stressant ou frustrant. Le déménagement ne nécessite que quelques commandes et beaucoup de patience (selon le nombre de conteneurs Docker que vous exécutez). Donc, voici comment j'ai migré mon serveur Docker vers un système entièrement nouveau (sans déplacer la machine virtuelle elle-même).

Déplacer des hôtes Docker ne doit pas être écrasant

Ce mois de janvier dernier a été la première fois que j'ai migré des conteneurs Docker. Je suis passé d'Unraid à une installation Docker appropriée dans une machine virtuelle Ubuntu. C'était honnêtement un déménagement assez simple, et j'ai utilisé les méthodes de sauvegarde intégrées pour certaines applications, et j'ai démarré d'autres à partir de zéro.

Cependant, j'ai récemment décidé de déplacer mon hôte Docker virtuel d'un serveur à un autre. Bien que j'aie pensé à déplacer la machine virtuelle elle-même, j'ai décidé de prendre une autre voie et de migrer l'installation de Docker vers une toute nouvelle machine virtuelle.

C'était assez écrasant d'y penser. Je devrais laisser mes conteneurs Docker hors ligne pendant un certain temps pour effectuer la migration, et il y a beaucoup de choses qui pourraient mal tourner pendant le transfert.

Cependant, une fois que je me suis plongé dans le processus, ce n'était vraiment pas aussi mauvais que je pensais. Bien sûr, cela prendrait quelques heures (et j'ai certainement rencontré quelques problèmes), mais dans l'ensemble, c'était assez indolore et pas si écrasant.

Assurez-vous que le nouveau système est correctement préparé

J'ai commencé par m'assurer que ma nouvelle machine virtuelle était prête à l'emploi. J'ai d'abord vérifié que j'utilisais la même version d'Ubuntu : Serveur 24.04 LTS. Ubuntu Server est devenu mon choix privilégié depuis plus d'une décennie chaque fois que j'ai besoin d'un serveur Linux. Je suis simplement à l'aise avec.

Une fois Ubuntu Server 24.04 installé sur le nouvel hôte de machine virtuelle, j'ai veillé à configurer Docker et toutes les autres dépendances dont j'aurais besoin. Cela inclut les pilotes supplémentaires pour NVIDIA ou Intel, et m'assurer que tous les chemins de dossier étaient configurés comme j'en aurais besoin avec Docker.

Après avoir tout configuré, j'ai arrêté à la fois le service Docker et le socket avec les commandes suivantes :

systemctl stop docker.socket
systemctl stop docker

    

Il se peut que vous n'ayez pas besoin d'exécuter les deux commandes, mais je l'ai fait. Cela a essentiellement désactivé Docker afin que je puisse apporter des modifications au système de fichiers Docker de base sans rien casser.

Une fois cela fait, j'ai exécuté les mêmes commandes sur l'ancien système. Je devais m'assurer que Docker était désactivé sur l'ancien système avant de rassembler les fichiers, car cela garantirait que rien ne change entre le début de la migration et sa fin.

Cela signifiait aussi que tous mes conteneurs Docker allaient être éteints. En toute honnêteté, c'était la pire partie pour moi. Mon homelab fait fonctionner toute ma maison avec Docker, depuis Home Assistant jusqu'à Audiobookshelf, Plex et de nombreux autres services. Éteindre Docker signifiait arrêter ces systèmes, donc j'ai dû attendre le bon moment pour le faire.

Finalement, j'ai trouvé un moment où le serveur était inactif et j'ai pu continuer en fermant Docker puis en passant à l'étape suivante : préparer tous les fichiers pour le transfert.

Rassembler tous les fichiers Docker

C'était la partie la plus longue du processus pour moi. J'ai fini par supprimer pas mal de fichiers et de dossiers dans le dossier où je monte mes volumes Docker en bind pour essayer de rendre ce processus aussi rapide que possible, mais cela a quand même pris quelques heures.

En gros, vous voulez archiver votre dossier Docker et ensuite, si vous utilisez une autre zone pour vos montages de volumes, ce dossier également. Si vous utilisez simplement des volumes Docker, ils seront alors capturés par la première commande.

Pour commencer, j'ai exécuté la commande suivante sur mon ancien serveur :

sudo tar -czvf docker-backup.tar.gz /var/lib/docker

    

Ce que cela fait, c'est sauvegarder le dossier /var/lib/docker dans un fichier tar.gz. En fonction du nombre de conteneurs que vous exécutez et de l'utilisation ou non des volumes Docker, cela peut prendre un certain temps. Pour moi, cela a pris environ 30 à 45 minutes.

Ensuite, j'ai exécuté la commande suivante sur mon ancien serveur :

sudo tar -cvzf docker-files.tar.gz /portainer

    

Puisque j'utilise Portainer comme mon gestionnaire Docker, je place tous mes fichiers Docker sous /portainer sur le serveur. Ainsi, j'ai /portainer/audiobookshelf, /portainer/plex, etc. La commande ci-dessus prend le dossier /portainer et le compresse dans un joli petit fichier, ce qui facilite le déplacement. Cela a pris environ une heure pour faire la sauvegarde en raison de la quantité de données que j'ai dans mes dossiers de volume Docker.

Une fois que les deux dossiers ont terminé de se compresser, j'étais prêt à passer à l'étape suivante : déplacer les archives compressées vers le nouveau serveur.

Déplacer tout vers le nouveau système est simple.

J'ai un réseau de 2,5 Gb/s chez moi et j'aime en profiter pleinement chaque fois que je le peux. Donc, j'ai trouvé une commande pour déplacer le fichier d'un serveur à l'autre tout en me montrant les vitesses de transfert dans le terminal :

rsync -ah --info=progress2 docker-backup.tar.gz user@remote-host:/destination/path/

    

En utilisant cette commande, je pouvais surveiller le transfert et m'assurer que tout se passait comme prévu. Heureusement, c'était le cas. En quelques minutes, les fichiers ont été déplacés de l'ancien serveur vers le nouveau serveur et j'étais prêt à continuer.

Bien sûr, si vous préférez, vous pouvez utiliser USB pour transférer des fichiers d'un serveur à l'autre. Mon ancien serveur (un système Dell R720 en rack) n'a que l'USB 2.0, donc il était beaucoup plus rapide pour moi de transférer les fichiers via le réseau.

Une fois les fichiers sur le nouveau serveur, il suffit de les décompresser à l'endroit approprié. J'ai commencé par le dossier Docker :

sudo tar -xpf docker-backup.tar.gz -C /

    

Quand cela fut terminé, j'ai couru :

sudo tar -xpf docker-files.tar.gz -C /

    

Ceci a remis tous mes anciens fichiers Docker et mes montages de volumes à leur place et a maintenu les permissions correctement réglées, ce qui constitue l'essentiel du déménagement.

En réalité, la création d'un tar de Docker, le déplacement des fichiers tar, puis l'extraction des fichiers a pris la majeure partie du temps pour le transfert. Au total, ces trois actions ont pris environ trois à quatre heures à compléter sur mon serveur.

Cependant, une fois que j'avais terminé cela, j'étais à un pas de la finalisation du déménagement. Maintenant, il était temps pour moi de enfin démarrer Docker sur le nouveau serveur.

Démarrez Docker sur le nouveau système et vos conteneurs devraient se lancer.

Avec tous les fichiers en place, j'ai activé Docker pour la première fois avec tous les conteneurs en place. C'était simple et ne nécessitait que deux commandes :

systemctl start docker
systemctl start docker.socket

    

Je m'attendais à ce que beaucoup de choses ne fonctionnent pas en activant Docker après le déménagement. Au lieu de cela, la plupart des choses se sont mises en marche et étaient prêtes à l'emploi. En réalité, c'est tout ce qu'il y a à faire pour démarrer Docker sur votre nouvelle machine.

Si la configuration n'est pas très différente entre votre ancien système et le nouveau, tout devrait simplement fonctionner. Si vous êtes comme moi et que vous avez beaucoup changé entre les deux systèmes, alors il y a quelques éléments à surveiller.

Choses à surveiller lors du déménagement

L'une des premières choses que j'ai dû corriger était de changer quelques conteneurs utilisant le runtime NVIDIA pour utiliser un runtime Intel. Sur mon ancien serveur, j'avais une carte graphique GTX 1650 pour aider au traitement de l'IA et à la transcodage. Le nouveau serveur avait un i9-13900K avec les graphiques intégrés d'Intel capables de gérer les mêmes charges de travail.

Cela a nécessité quelques manigances, et je ne suis pas encore complètement passé à l'autre mode (j'ai abandonné Scrypted et je le laisse simplement fonctionner sur le processeur au lieu de l'iGPU), mais dans l'ensemble, c'était un changement assez simple.

J'ai également rencontré un gros problème avec Home Assistant. Pour une raison quelconque, le conteneur Docker de Home Assistant n'a pas transféré aucun de ses paramètres. Il y a des informations de configuration que je lui fais stocker dans /portainer/homeassistant, mais il a démarré comme si je n'avais jamais utilisé Home Assistant auparavant.

C'était cependant un remède facile. J'ai simplement rallumé l'ancienne machine virtuelle, lancé Home Assistant dessus, téléchargé le fichier de sauvegarde et l'ai restauré sur la nouvelle machine virtuelle. Cela m'a immédiatement remis en marche.

Certaines des fonctionnalités réseau de Docker pourraient également nécessiter un examen. Par exemple, pour Scrypted, j'ai dû revenir au réseau hôte à partir d'un nouveau réseau scrypted-default qui a été créé pour une raison quelconque.

Je devais également configurer l'adresse IP statique sur la nouvelle machine virtuelle. Ensuite, je devais mettre à jour quelques autres petits détails sur le serveur pour que tout fonctionne correctement avec les graphiques intégrés que je passais.

Dans l'ensemble, c'était un déménagement plutôt fluide et je suis très heureux du nouveau serveur. Il est plus rapide, plus réactif et beaucoup plus performant que l'ancien serveur, tout en consommant moins d'électricité.

Le déménagement était relativement simple, et je suis content d'avoir appris à déplacer des conteneurs Docker d'un système à un autre. Je suis sûr que cela sera utile à un moment donné !


Si vous n'avez jamais exécuté de conteneurs Docker auparavant, ou que vous débutez simplement, Docker est un outil formidable. Il exécute à lui seul presque tout mon homelab.

Voici une poignée de mes conteneurs Docker préférés que je pense que tout homelabber devrait exécuter. La plupart sont simples à configurer et peuvent ajouter beaucoup de valeur à votre installation. En fait, mon homelab est devenu l'une des choses les plus utiles de ma maison.