Maison > Article > Opération et maintenance > Linux et Docker : Comment migrer et synchroniser les conteneurs entre les hôtes ?
Linux et Docker : Comment implémenter la migration cross-host et la synchronisation des conteneurs ?
Résumé : Docker est une technologie de conteneurisation populaire qui fournit une solution de virtualisation légère. Dans un environnement multi-hôtes, il est très courant de migrer et de synchroniser les conteneurs entre les hôtes. Cet article explique comment utiliser Linux et Docker pour implémenter la migration entre hôtes et la synchronisation des conteneurs, et fournit un exemple de code pour référence.
2.1 Stockage de migration
Pour le stockage de migration de conteneurs, vous avez le choix entre plusieurs technologies couramment utilisées, telles que les systèmes de fichiers de réplication et de synchronisation traditionnels, les systèmes de fichiers distribués et le stockage par blocs distribués. La réplication et la synchronisation des systèmes de fichiers constituent l'approche la plus courante. Elles conviennent aux environnements à petite échelle, mais peuvent entraîner des goulots d'étranglement en termes de performances dans les environnements à grande échelle. Les systèmes de fichiers distribués et le stockage en bloc distribué peuvent offrir des performances et une évolutivité supérieures, mais sont relativement complexes à configurer et à gérer. Ici, nous illustrerons en utilisant la copie et la synchronisation des systèmes de fichiers comme exemple.
Supposons que nous ayons deux hôtes, l'hôte source et l'hôte cible. Pour migrer le conteneur de l'hôte source vers l'hôte cible, nous pouvons effectuer les étapes suivantes :
Étape 1 : Arrêter l'exécution du conteneur sur l'hôte source. .
$ docker stop container_id
Étape 2 : Exportez le système de fichiers du conteneur.
$ docker export container_id > container.tar
Étape 3 : Transférez le système de fichiers du conteneur vers l'hôte cible.
$ scp container.tar user@target_host:/path/
Étape 4 : Importez le système de fichiers du conteneur sur l'hôte cible.
$ docker import /path/container.tar
Étape 5 : Démarrez le conteneur pour qu'il s'exécute sur l'hôte cible.
$ docker run -d --name container_name image_name
2.2 Synchronisation du réseau
Pendant le processus de migration du conteneur, il est très important de maintenir la stabilité de la connexion réseau. Linux fournit certains outils et technologies pour réaliser la synchronisation réseau, tels que les règles iptables, les espaces de noms réseau et macvlan. La mise en œuvre exacte dépend de l'architecture et des exigences du réseau.
Supposons que nous ayons deux hôtes, l'hôte source et l'hôte cible. Pour maintenir la connexion réseau du conteneur pendant le processus de migration, nous pouvons effectuer les étapes suivantes :
Étape 1 : Créez un espace de noms réseau sur l'hôte source et ajoutez que les interfaces réseau du conteneur sont déplacées vers cet espace de noms.
$ ip link set dev eth0 netns container_ns
Étape 2 : Créez un espace de noms réseau sur l'hôte cible et déplacez l'interface réseau du conteneur vers l'espace de noms.
$ ip link set dev eth0 netns container_ns
Étape 3 : Configurez les règles iptables sur l'hôte source pour rediriger le trafic réseau du conteneur vers l'hôte cible.
$ iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination target_ip
Étape 4 : Démarrez l'interface réseau du conteneur sur l'hôte cible.
$ ip link set dev eth0 up
Étape 5 : Configurez les règles iptables sur l'hôte cible pour transférer le trafic réseau du conteneur vers l'espace de noms réseau du conteneur.
$ iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination container_ip
En supposant que nous ayons configuré Docker Swarm, pour implémenter la migration multi-hôtes et la synchronisation des conteneurs dans un environnement multi-hôtes, nous pouvons effectuer les étapes suivantes :
Étape 1 : Ajouter le conteneur au cluster Docker Swarm.
$ docker swarm join --token SWMTKN-abcdefg1234567890 manager_ip:2377
Étape 2 : étiquetez le conteneur sur l'hôte source pour indiquer qu'il doit être migré entre les hôtes.
$ docker service update --label-add com.docker.ucp.mesh.http.ports=80 container_name
Étape 3 : Démarrez le service avec le même nom sur l'hôte cible.
$ docker service create --name container_name image_name
Étape 4 : Docker Swarm migrera automatiquement les conteneurs de l'hôte source vers l'hôte cible.
Références :
Annexe : Exemple de code
# 示例代码1:复制和同步文件系统 # 步骤1:停止容器在源主机上的运行。 $ docker stop container_id # 步骤2:导出容器的文件系统。 $ docker export container_id > container.tar # 步骤3:将容器的文件系统传输到目标主机。 $ scp container.tar user@target_host:/path/ # 步骤4:在目标主机上导入容器的文件系统。 $ docker import /path/container.tar # 步骤5:启动容器在目标主机上运行。 $ docker run -d --name container_name image_name # 示例代码2:网络同步 # 步骤1:在源主机上创建网络命名空间,并将容器的网络接口移动到该命名空间。 $ ip link set dev eth0 netns container_ns # 步骤2:在目标主机上创建网络命名空间,并将容器的网络接口移动到该命名空间。 $ ip link set dev eth0 netns container_ns # 步骤3:在源主机上设置iptables规则,将容器的网络流量重定向到目标主机。 $ iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination target_ip # 步骤4:在目标主机上启动容器的网络接口。 $ ip link set dev eth0 up # 步骤5:在目标主机上设置iptables规则,将容器的网络流量转发到容器的网络命名空间。 $ iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination container_ip # 示例代码3:Docker Swarm的容器迁移和同步 # 步骤1:将容器加入到Docker Swarm集群。 $ docker swarm join --token SWMTKN-abcdefg1234567890 manager_ip:2377 # 步骤2:在源主机上标记容器,以指示它需要跨主机迁移。 $ docker service update --label-add com.docker.ucp.mesh.http.ports=80 container_name # 步骤3:在目标主机上启动同名的服务。 $ docker service create --name container_name image_name # 步骤4:Docker Swarm会自动将源主机上的容器迁移到目标主机上。
(Nombre total de mots : environ 1306 mots dans le texte original, 607 mots dans l'exemple de code)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!