Linux dan Docker: Bagaimana untuk melaksanakan migrasi silang hos dan penyegerakan kontena?
Abstrak: Docker ialah teknologi kontena yang popular yang menyediakan penyelesaian maya yang ringan. Dalam persekitaran berbilang hos, adalah keperluan yang sangat biasa untuk memindahkan dan menyegerakkan bekas merentas hos. Artikel ini akan memperkenalkan cara menggunakan Linux dan Docker untuk melaksanakan penghijrahan silang hos dan penyegerakan bekas, dan menyediakan beberapa kod sampel untuk rujukan.
2.1 Storan Migrasi
Untuk storan migrasi kontena, terdapat beberapa teknologi yang biasa digunakan untuk dipilih, seperti sistem fail replikasi dan penyegerakan tradisional, sistem fail teragih dan storan blok teragih. Meniru dan menyegerakkan sistem fail ialah pendekatan yang paling biasa, dan ia berfungsi dengan baik untuk persekitaran berskala kecil, tetapi boleh menyebabkan kesesakan prestasi dalam persekitaran berskala besar. Sistem fail teragih dan storan blok teragih boleh memberikan prestasi dan kebolehskalaan yang lebih tinggi, tetapi agak rumit untuk dikonfigurasikan dan diurus. Di sini, kami akan menggambarkan menggunakan menyalin dan menyegerakkan sistem fail sebagai contoh.
Andaikan kita mempunyai dua hos, hos sumber dan hos sasaran Untuk memindahkan bekas daripada hos sumber kepada hos sasaran, kita boleh melakukan langkah berikut:
Langkah 1: Hentikan bekas daripada berjalan pada hos sumber. .
$ docker stop container_id
Langkah 2: Eksport sistem fail bekas.
$ docker export container_id > container.tar
Langkah 3: Pindahkan sistem fail bekas ke hos sasaran.
$ scp container.tar user@target_host:/path/
Langkah 4: Import sistem fail bekas pada hos sasaran.
$ docker import /path/container.tar
Langkah 5: Mulakan bekas untuk berjalan pada hos sasaran.
$ docker run -d --name container_name image_name
2.2 Penyegerakan rangkaian
Semasa proses migrasi kontena, adalah sangat penting untuk mengekalkan kestabilan sambungan rangkaian. Linux menyediakan beberapa alat dan teknologi untuk mencapai penyegerakan rangkaian, seperti peraturan iptables, ruang nama rangkaian dan macvlan. Pelaksanaan yang tepat bergantung pada seni bina rangkaian dan keperluan.
Katakan kita mempunyai dua hos, hos sumber dan hos sasaran Untuk mengekalkan sambungan rangkaian bekas semasa proses pemindahan, kita boleh melakukan langkah berikut:
Langkah 1: Buat ruang nama rangkaian pada hos sumber dan. tambahkan antara muka Rangkaian bekas dipindahkan ke ruang nama ini.
$ ip link set dev eth0 netns container_ns
Langkah 2: Buat ruang nama rangkaian pada hos sasaran dan alihkan antara muka rangkaian bekas ke ruang nama.
$ ip link set dev eth0 netns container_ns
Langkah 3: Sediakan peraturan iptables pada hos sumber untuk mengubah hala trafik rangkaian kontena ke hos sasaran.
$ iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination target_ip
Langkah 4: Mulakan antara muka rangkaian bekas pada hos sasaran.
$ ip link set dev eth0 up
Langkah 5: Sediakan peraturan iptables pada hos sasaran untuk memajukan trafik rangkaian kontena ke ruang nama rangkaian kontena.
$ iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination container_ip
Dengan mengandaikan bahawa kami telah mengkonfigurasi Docker Swarm, untuk melaksanakan migrasi silang hos dan penyegerakan bekas dalam persekitaran berbilang hos, kami boleh melakukan langkah berikut:
Langkah 1: Tambahkan bekas pada kelompok Docker Swarm.
$ docker swarm join --token SWMTKN-abcdefg1234567890 manager_ip:2377
Langkah 2: Tandai bekas pada hos sumber untuk menunjukkan bahawa ia perlu dipindahkan merentas hos.
$ docker service update --label-add com.docker.ucp.mesh.http.ports=80 container_name
Langkah 3: Mulakan perkhidmatan dengan nama yang sama pada hos sasaran.
$ docker service create --name container_name image_name
Langkah 4: Docker Swarm akan secara automatik memindahkan bekas pada hos sumber kepada hos sasaran.
Rujukan:
Lampiran: Contoh Kod
# 示例代码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会自动将源主机上的容器迁移到目标主机上。
(Jumlah bilangan perkataan: teks asal kira-kira 1306 perkataan, kod sampel 607 perkataan)
Atas ialah kandungan terperinci Linux dan Docker: Bagaimana untuk memindahkan dan menyegerakkan bekas merentas hos?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!