如何使用历史数据将图像和容器移动到新服务器

图片 :

docker save -o /root/bkp1/docker_image_bkp ccn/ccn-server:1.0.4 

容器:

 docker export cef0dff04e70 > /root/bkp1/container.tar 

在新的服务器上:

 docker load -i /root/pmmbkp1/docker_image_bkp cat /root/bkp1/container.tar | docker import - ccdata 

我创build并开始了它。 但我无法在新服务器中find旧数据。 如何将历史数据与容器一起移动?

目前(2016年9月),没有任何docker savedocker export甚至docker commit可以产生一个tar文件,其中包含容器中安装的卷中包含的任何数据。

简而言之,如果您希望将卷数据从一台服务器移动到另一台服务器,最好的方法是使用共享文件系统来存储docker容器的数据。 请检查将共享存储卷挂载为数据卷文档。

一旦拥有Docker集群的共享存储,您可以在原始服务器中停止旧的容器,然后使用相同的configuration在另一个服务器中启动新的容器。 旧容器和新容器都应安装共享存储系统中存在的相同卷。

Data Persistent在Docker的编排系统中仍然是一个问题。 但另一种编排工具Kubernetes 1.4现在支持持续卷 。

编辑:

如果您的容器已经在运行,并且想要移动它,则可以尝试执行以下步骤:

  1. 使用docker savedocker commit将原始容器保存到图像。 然后将保存的图像加载到新的服务器。

  2. 检查原始容器的安装点,然后使用您的安装点configurationfind本地卷文件。 例如,用docker inspect ,你可以find类似这样的东西:

    “坐骑”:[

     { "Name": "95d7a2419c62242149562d5098edcc7578754ae2f3c35a45c4d690f3c340905a", "Source": "/var/lib/docker/volumes/95d7a2419c62242149562d5098edcc7578754ae2f3c35a45c4d690f3c340905a/_data", "Destination": "/var/lib/mysql", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } 

    ]

在这里你可以看到挂载点是"/var/lib/docker/volumes/95d7a2419c62242149562d5098edcc7578754ae2f3c35a45c4d690f3c340905a/_data"

  1. 将您的本地卷文件复制到新的服务器。

  2. 在新服务器中启动一个新的容器,新的容器应该在其中装载原始本地卷文件的副本。 你可以使用docker run命令的-v参数来实现它。

  3. 您可能需要考虑使用相同的configuration在新服务器中启动新容器。 docker inspect命令可以帮助您找出容器的configuration以及安装点configuration。

上面的解决scheme可能看起来很复杂和难看,但除非您使用共享存储,否则没有其他方法可以轻松移动容器。