我正在寻找一个简单的教程来测试两个VM之间的容器迁移。我看过一些视频,但他们没有准确地说明他们是如何做到的,或者实际上没有找到任何好的教程。 我是docker的新手,所以我只是想测试一下这个迁移的工作原理。所以,你可以给我一些明确解释如何做的教程/链接,这将是非常好的。 非常感谢您的帮助,谢谢:)
答案 0 :(得分:2)
您可以使用CRIU等检查点/恢复工具。 https://criu.org/Live_migration 在将容器迁移到其他主机之前,您需要检查容器的所有进程和内存状态。 在接收器主机中,您需要创建相同的容器,然后还原已传输的检查点。 看看这些:
https://circleci.com/blog/checkpoint-and-restore-docker-container-with-criu/
https://forums.docker.com/t/docker-checkpoint-restore-on-another-host/27427/3
答案 1 :(得分:2)
我真的赞同Farhood的回答。我想在这里详细写一下。首先,由于CRIU与Docker的集成,Docker支持contianer的“检查点和恢复”。但是,它是实验模式所以要小心。
什么是CRIU? CRIU是Linux操作系统的软件工具。使用此工具,您可以冻结正在运行的应用程序(或其中的一部分),并将其作为磁盘上的文件集合进行检查。然后,您可以使用这些文件来还原应用程序,并在冻结期间完全按原样运行它。
检查点/恢复的应用
通过此操作,您可以检查应用程序并将文件(从检查点)复制到目标计算机,并使用称为实时迁移的文件启动应用程序,
您可以使用应用程序的检查点并将应用程序恢复到之前的状态,这只是快照。
“检查点和恢复”可用于调试应用程序。应用程序的所有进程都会在错误发生之前进行检查,然后重新启动(可能在单个主机上)以进行调试。
优化启动时间:检查操作系统的启动过程,下次可以使用此检查点启动操作系统。
目前, CRIU 是唯一可用于检查点和还原容器的工具。我将向您展示上述操作的简单步骤。
第1步:启用实验性功能(包括CRIU)。
echo "{\"experimental\": true}" >> /etc/docker/daemon.json
systemctl restart docker
第2步:让我们部署一个打印数字的简单容器。
docker run -d --name looper --security-opt seccomp:unconfined busybox \
/bin/sh -c 'i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done'
第3步:让我们通过打印日志来验证应用程序是否正在运行。
docker logs looper
步骤4:使用以下Docker
命令让检查点此容器。检查点的名称是“checkpoint1”。我们将使用此名称来恢复容器。
docker checkpoint create looper checkpoint1
第4步:您可以验证目录中的检查点。
/var/lib/docker/containers/<container-ID>/checkpoints/<checkpoint name>/
步骤5:让我们使用以下Docker
命令将容器恢复到之前的状态。
docker start --checkpoint checkpoint1 looper
第6步:如何验证?在步骤5之前和之后打印容器的日志。
(容器迁移)如何在不同的VM中恢复容器? 解决方案是将(容器的)检查点文件复制到目标节点,并使用它们来恢复容器。目标节点应该让Docker在实验模式下运行。
我特此附上有关Docker容器迁移的最新文章。你正在寻找这篇论文。
答案 2 :(得分:0)
您可以通过运行
导出容器docker export <container-name> -o container.tar
然后,您可以将tar复制到另一个VM并通过运行
导入它docker import container.tar <image-name>
<强> WARNINIG:强>
导出不会将挂载的卷导出为tarball的一部分。查看documentation了解详情。
如果您有卷并且想要将其迁移到新VM,请选中How to port data-only volumes from one host to another?
答案 3 :(得分:-1)
要导出图片,请使用docker save
再次导入图片,使用docker load
。
要导出容器,请使用docker export
再次导入容器( AS IMAGE ,不包含元数据),使用docker import
。
您可以在docker COMMAND --help
找到有关这些命令以及如何使用它们的更多信息。
遗憾的是,您无法迁移正在运行的容器,因此我建议您记下用于启动容器的docker run
命令,然后在另一个节点上再次启动它们。