Docker中的容器迁移

时间:2017-11-14 14:50:06

标签: docker migration containers

我正在寻找一个简单的教程来测试两个VM之间的容器迁移。我看过一些视频,但他们没有准确地说明他们是如何做到的,或者实际上没有找到任何好的教程。 我是docker的新手,所以我只是想测试一下这个迁移的工作原理。所以,你可以给我一些明确解释如何做的教程/链接,这将是非常好的。 非常感谢您的帮助,谢谢:)

4 个答案:

答案 0 :(得分:2)

您可以使用CRIU等检查点/恢复工具。 https://criu.org/Live_migration 在将容器迁移到其他主机之前,您需要检查容器的所有进程和内存状态。 在接收器主机中,您需要创建相同的容器,然后还原已传输的检查点。 看看这些:

https://circleci.com/blog/checkpoint-and-restore-docker-container-with-criu/

https://criu.org/Docker

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容器迁移的最新文章。你正在寻找这篇论文。

http://www.cs.toronto.edu/~sahil/suneja-icdcs17.pdf

答案 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命令,然后在另一个节点上再次启动它们。