如何使用历史数据将图像和容器移动到新服务器
图片 :
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 save
或docker export
甚至docker commit
可以产生一个tar文件,其中包含容器中安装的卷中包含的任何数据。
简而言之,如果您希望将卷数据从一台服务器移动到另一台服务器,最好的方法是使用共享文件系统来存储docker容器的数据。 请检查将共享存储卷挂载为数据卷文档。
一旦拥有Docker集群的共享存储,您可以在原始服务器中停止旧的容器,然后使用相同的configuration在另一个服务器中启动新的容器。 旧容器和新容器都应安装共享存储系统中存在的相同卷。
Data Persistent在Docker的编排系统中仍然是一个问题。 但另一种编排工具Kubernetes 1.4现在支持持续卷 。
编辑:
如果您的容器已经在运行,并且想要移动它,则可以尝试执行以下步骤:
-
使用
docker save
或docker commit
将原始容器保存到图像。 然后将保存的图像加载到新的服务器。 -
检查原始容器的安装点,然后使用您的安装点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"
-
将您的本地卷文件复制到新的服务器。
-
在新服务器中启动一个新的容器,新的容器应该在其中装载原始本地卷文件的副本。 你可以使用
docker run
命令的-v
参数来实现它。 -
您可能需要考虑使用相同的configuration在新服务器中启动新容器。
docker inspect
命令可以帮助您找出容器的configuration以及安装点configuration。
上面的解决scheme可能看起来很复杂和难看,但除非您使用共享存储,否则没有其他方法可以轻松移动容器。