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 obtenu les démangeaisons pour mettre à niveau mon HomeLab, retirant un ancien serveur de montage à rack en faveur d'un système plus récent et plus puissant – mais déplacer mes conteneurs Docker était une bête que je ne savais pas comment m'attaquer.
En fait, ce n'était pas si difficile à faire et était plus long que effrayant ou frustrant. Le mouvement ne nécessite que quelques commandes et beaucoup de patience (selon le nombre de conteneurs Docker que vous utilisez). Voici donc comment j'ai migré mon serveur Docker vers un système entièrement nouveau (sans déplacer la machine virtuelle elle-même).
Sommaire
Déménager des hôtes Docker ne doit pas être écrasant
En janvier dernier, c'était la première fois que je migré les conteneurs Docker. Je suis passé de Unded à une installation Docker appropriée dans une machine virtuelle Ubuntu. Ce fut honnêtement un mouvement assez simple, et j'ai utilisé les méthodes de sauvegarde intégrées pour certaines applications, et j'ai commencé 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. Alors que j'ai pensé à déplacer la machine virtuelle elle-même, j'ai décidé d'emprunter une voie différente et de migrer l'installation de Docker vers une toute nouvelle machine virtuelle.
C'était assez écrasant à penser. Je devrais avoir mes conteneurs Docker pendant un certain temps pour faire la migration, et il y a beaucoup de choses qui pourraient mal tourner pendant le transfert.
Cependant, une fois que j'ai creusé dans le processus, ce n'était vraiment pas aussi mauvais que je le pensais. Bien sûr, cela prendrait quelques heures (et j'ai définitivement rencontré quelques accrocs), 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 à partir. Je me suis d'abord assuré que j'utilisais la même version d'Ubuntu: Server 24.04 LTS. Ubuntu Server est mon go-to depuis plus d'une décennie maintenant chaque fois que j'ai besoin d'un serveur Linux. Je suis juste à l'aise.
Une fois que le serveur Ubuntu 24.04 a été installé sur le nouvel hôte de machine virtuelle, je me suis assuré d'obtenir Docker et toutes les autres dépendances dont j'avais besoin et prête à l'emploi. Cela comprend tous les pilotes supplémentaires pour Nvidia ou Intel, et s'assurer que tous les chemins de dossier ont été mis en place dont j'avais 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
Vous n'aurez peut-être pas besoin d'exécuter les deux commandes, mais je l'ai fait. Cela a essentiellement arrêté Docker afin que je puisse apporter des modifications au système de fichiers Docker de base et ne rien gâcher.
Une fois cela fait, j'ai exécuté exactement 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 des fichiers, car cela garantirait que rien ne changerait par rapport au moment où j'ai commencé la migration vers le moment où je l'ai terminé.
Cela signifiait également que tous mes conteneurs Docker seraient désactivés. En toute honnêteté, c'était le pire pour moi. Mon HomeLab dirige toute ma maison à l'aide de Docker, de l'assistant à domicile à AudioRebookshel, Plex et de nombreux autres services. Éteindre Docker signifiait fermer ces systèmes, j'ai donc dû attendre le bon moment pour le faire.
Finalement, j'ai trouvé un moment où le serveur était inactif et j'ai pu procéder en fermant Docker, puis en passant à l'étape suivante: préparer tous les fichiers à transférer.
Rassemblez 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 du dossier où je lie Mount mes volumes Docker pour essayer de faire ce processus aussi rapide que possible, mais cela a encore pris quelques heures.
Essentiellement, vous voulez tariner votre dossier Docker et ensuite, si vous utilisez une zone différente pour vos montures de volume, ce dossier aussi. Si vous utilisez simplement des volumes Docker, ils seront 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 sauvegarde le dossier / var / lib / docker dans un fichier tar.gz. Selon le nombre de conteneurs que vous utilisez et que vous utilisiez ou non les volumes Docker, cela pourrait 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
Depuis que j'exécute Portainer en tant que gestionnaire de docker, je mets juste tous mes fichiers docker sous / portainer sur le serveur. Donc, j'ai / portainer / Audiobookshelf, / Portainener / Plex, etc. La commande ci-dessus prend le dossier / portainer et le tire dans un joli petit fichier, ce qui facilite le déplacement. Cela a pris environ une heure pour sauvegarder 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é le chant, j'étais prêt à passer à l'étape suivante: déplacer les archives compressées vers le nouveau serveur.
Tout déplacer vers le nouveau système est simple
J'ai un réseau de 2,5 Go / s à la maison et j'aime en profiter pleinement chaque fois que je le peux. Donc, j'ai déterré une commande pour déplacer le fichier d'un serveur à l'autre tout en me montrant des 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 s'est passé comme prévu. Heureusement, c'est 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 déplacer des fichiers d'un serveur à l'autre. Mon ancien serveur (un système Dell R720 Rack-Mount) n'a que USB 2.0, il était donc beaucoup plus rapide pour moi de déplacer les fichiers sur le réseau.
Une fois les fichiers sur le nouveau serveur, il suffit de les mettre en place. J'ai commencé avec le dossier Docker:
sudo tar -xpf docker-backup.tar.gz -C /
Quand cela a terminé, j'ai couru:
sudo tar -xpf docker-files.tar.gz -C /
Cela a placé tous mes anciens fichiers Docker et mon volume monte où ils devraient aller et maintenir les autorisations correctement définies, ce qui est la majeure partie du mouvement.
Vraiment, taper Docker, déplacer les tarfiles, puis dénué les fichiers est ce qui a pris la majeure partie du temps pour le déménagement. En tout, ces trois actions ont pris environ trois à quatre heures pour terminer mon serveur.
Cependant, une fois que j'ai fait cela, j'étais à une étape du déménagement terminé. Maintenant, il était temps pour moi de démarrer enfin Docker sur le nouveau serveur.
Démarrez Docker sur le nouveau système et vos conteneurs doivent tourner
Avec tous les fichiers en place, j'ai allumé 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 qu'une tonne de choses se casse lors de l'activation de Docker après le déménagement. Au lieu de cela, la plupart des choses tournaient tout de suite et étaient prêtes à partir. Vraiment cependant, c'est tout ce qu'il y a pour démarrer Docker sur votre nouvelle machine.
Si la configuration n'est pas très différente entre votre ancien système et nouveau, tout devrait simplement fonctionner. Si vous êtes comme moi, cependant, et que vous avez beaucoup changé entre les deux systèmes, il y a quelques choses à surveiller.
Choses à rechercher dans le mouvement
L'une des premières choses que j'ai dû corriger a été de modifier quelques conteneurs qui utilisaient le NVIDIA Runtime pour utiliser un runtime Intel. Sur mon ancien serveur, j'avais une carte graphique GTX 1650 pour aider au traitement et au transcodage de l'IA. Le nouveau serveur avait un i9-13900k avec les graphiques intégrés d'Intel qui est capable de gérer les mêmes charges de travail.
Cela a pris des finagles, et je ne suis toujours pas entièrement changé (j'ai abandonné Scrypted et je le laisse fonctionner juste sur le processeur au lieu de l'IGPU), mais dans l'ensemble, c'était un commutateur assez simple.
J'ai également rencontré un assez gros problème avec l'assistant à domicile. Le conteneur Docker de l'assistant à domicile, pour une raison quelconque, n'a déplacé aucun de ses paramètres. Il y a des informations sur la configuration que je le fais stocker dans / portainer / homeSSistant, mais cela a commencé comme si je n'avais jamais couru à domicile auparavant.
C'était un remède facile, cependant. J'ai simplement allumé l'ancienne machine virtuelle, entré l'assistant à domicile dessus, téléchargé le fichier de sauvegarde et restauré cela sur la nouvelle machine virtuelle. Cela m'a immédiatement fait fonctionner.
Certains réseaux de Docker pourraient également nécessiter une fois. Scrypted, par exemple, j'ai dû changer pour hôte de réseautage à partir d'un nouveau réseau de défaut scrypté qui a été créé pour une raison quelconque.
J'ai également dû obtenir le jeu IP statique sur la nouvelle machine virtuelle. Ensuite, j'ai dû mettre à jour quelques autres petites cotes et se terminer autour du serveur pour que tout fonctionne bien avec les graphiques intégrés que je traversais.
Dans l'ensemble, ce fut une décision assez fluide et je suis très satisfait du nouveau serveur. C'est plus rapide, plus réactif et beaucoup plus capable que l'ancien serveur, tout en utilisant moins d'électricité.
Cette décision a été 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 à la route!
Si vous n'avez jamais exécuté de conteneurs Docker auparavant ou que vous débutez, Docker est un merveilleux outil. Il coule à lui seul à peu près tout mon domicile.
Voici une poignée de mes conteneurs Docker préférés que je pense que chaque maison devrait fonctionner. La plupart sont simples à configurer et peuvent ajouter beaucoup de valeur à votre configuration. En fait, ma maison est devenue l'une des choses les plus utiles de ma maison.
