如何将容器化应用程序迁移到不同的主机

68次阅读
没有评论

问题描述

有一个由两个容器组成的论坛应用程序:一个用于数据库,另一个用于公告板应用程序本身。这两个容器在同一主机上运行了相当长的时间。该应用程序不遵循“微服务”架构,因为数据库文件存储在数据库容器的可写层中。论坛的配置设置直接设置在公告板应用程序的可写层中。

由于当前服务器已经到达生命周期的尽头,我们希望将该论坛迁移到不同的主机。我们看到有两种方法可以实现:

  1. 使用docker commit将两个容器制作成镜像,然后将这些镜像上传到仓库,并从新主机上拉取它们。
  2. 使用docker export创建容器文件系统的归档,并在新主机上导入它们。

对于临时容器迁移,这两种方法的优缺点是什么?是否有更适合我们特定需求的解决方案?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1:使用docker commitdocker save进行容器迁移

根据您的需求,只需使用docker commit将容器提交为新的镜像,然后使用docker save将镜像保存为归档文件,最后在新主机上使用docker loaddocker run来运行它。

以下是具体步骤:
1. 在当前主机上使用docker commit命令将容器提交为新的镜像。假设容器名称为CONTAINER,您可以使用以下命令:
docker commit CONTAINER name:tag
这将创建一个名为name:tag的新镜像。

  1. 使用docker save命令将镜像保存为归档文件。假设您要将归档文件保存为archive.tar.gz,您可以使用以下命令:
    docker save name:tag | gzip > archive.tar.gz
    这将创建一个名为archive.tar.gz的归档文件。

  2. 将归档文件传输到新主机。您可以使用scp命令将归档文件传输到新主机的根目录下:
    scp archive.tar.gz root@new:.

  3. 在新主机上使用docker load命令加载归档文件,并使用docker run命令运行容器。假设您已经将归档文件保存在新主机的根目录下,您可以使用以下命令:
    docker load < archive.tar.gz
    docker run name:latest

    这将加载归档文件中的镜像,并在新主机上运行容器。

请注意,为了保留归档文件中的标签,保存镜像时使用了name:tag而不是容器的ID。

方案2:使用docker exportdocker import进行容器迁移

使用docker exportdocker import命令可以创建容器文件系统的归档,并在新主机上导入它们。但需要注意的是,docker export只会保存容器文件系统,不会保存元数据,如默认命令。因此,在新主机上导入归档文件时可能会遇到一些问题。

以下是具体步骤:
1. 在当前主机上使用docker export命令创建容器文件系统的归档文件。假设容器名称为CONTAINER,您可以使用以下命令:
docker export CONTAINER > container.tar
这将创建一个名为container.tar的归档文件。

  1. 将归档文件传输到新主机。您可以使用scp命令将归档文件传输到新主机的根目录下:
    scp container.tar root@new:.

  2. 在新主机上使用docker import命令导入归档文件,并使用docker run命令运行容器。假设您已经将归档文件保存在新主机的根目录下,您可以使用以下命令:
    docker import container.tar name:tag
    docker run name:latest

    这将导入归档文件中的容器文件系统,并在新主机上运行容器。

请注意,使用docker exportdocker import命令进行容器迁移时,可能会丢失一些元数据,如默认命令。因此,这种方法可能不适用于所有情况。

方案比较

方案1使用docker commitdocker save命令进行容器迁移,可以保留镜像的所有元数据,并且在新主机上运行容器非常简单。但是,这种方法需要上传和下载镜像,可能会占用更多的网络带宽和存储空间。

方案2使用docker exportdocker import命令进行容器迁移,可以创建容器文件系统的归档文件,并在新主机上导入它们。但是,这种方法可能会丢失一些元数据,如默认命令,导致在新主机上运行容器时出现问题。

根据您的需求和具体情况,您可以选择适合您的方案进行容器迁移。

以上是针对临时容器迁移的两种常见方法,根据您的具体需求选择适合您的方法即可。

正文完