Docker容器跨服务器迁移之备份恢复流程步骤
迁移容器同时涉及到两个操作,备份和恢复。
我们可以将任何一个Docker容器从一台机器迁移到另一台机器。
在迁移过程中,首先我们将把容器 备份为Docker镜像快照。
然后,该Docker镜像或者是被推送到了Docker注册中心,或者被作为tar包文件保存到了本地。
如果我们将镜像推送 到了Docker注册中心,我们简单地从任何我们想要的机器上使用 docker run 命令来恢复并运行该容器。
但是,如果我们将镜像打包成tar包备份到了本地,我们只需要拷贝或移动该镜像到我们想要的机器上,加载该镜像并运行需要的容器 即可。
今天我们就介绍备份到本地的情况
众所周知docker本地的备份方式有两种:
export
save
区别:
docker export 是当前的状态(容器),
docker save 是针对(镜像)images
主要的区别是:
save是可以回滚以前的配置。
export 只是当前的。
Ps:
导出后再导入(exported-imported)的镜像会丢失所有的历史,
而保存后再加载(saveed-loaded)的镜像没有丢失历史和层 (layer)。
这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),
同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回滚
(可以执行docker tag <LAYER ID> <IMAGE NAME>来回滚之前的层)。
进入正题
第一种 export:
找出要备份容器的ID
[[email protected] ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be8cf8bd2a78 goblog "bee run" 2 weeks ago Up 2 weeks 0.0.0.0:8080->8080/tcp goblogbeego
103fd0f26448 hyperf/hyperf:7.4-alpine-v3.11-swoole "/bin/sh" 3 months ago Exited (255) 5 weeks ago 0.0.0.0:9601->9601/tcp hyperf
备份 (export是把容器打成一个tar包)
[[email protected] ~]$ docker export be8cf8bd2a78 >goblog.tar
[[email protected] ~]$ du -sh goblog.tar
1187M goblog.tar
恢复
把刚才备份的centos_demo.tar打包到目标服务器(可以用scp,winScp等工具)
[[email protected] ~]$ cat goblog.tar |docker import - goblog:demo
e14802af67f0f289ceb9848e21a95f03dc34eb6f234c8f98f1a6e1ec7fe34a67
查看新生成的镜像
[[email protected] ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
goblog demo e14802af67f0 2 weeks ago 862MB
第二种 save:
得到镜像名称
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
goblog latest 4b4b017a2545 2 weeks ago 1.16GB
golang latest 0821480a2b48 2 weeks ago 862MB
hyperf/hyperf 7.4-alpine-v3.11-swoole e14802af67f0 3 months ago 108MB
备份镜像
[[email protected] ~]$ docker save goblog >goblog.tar
恢复镜像
[[email protected] ~]$ docker load <goblog.tar
查看恢复的镜像
[[email protected]~]$ docker images
REPOSITORY TAG IMAGE ID CREATED
goblog latest 4b4b017a2545 2 weeks ago 1.16 GB
总结
我们通过 docker images –tree 看到他的历史记录。
Docker的文件系统AUFS,一种“增量文件系统”,用户所做修改以增量的方式保存,所以才能看到这些历史的增量。
备份迁移的方式自己选,推荐用export,毕竟save太大了,对于历史也没啥用处 !
对于数据安全关注更深的话,
可以用docker volumes这样的数据映射。
完
相关文章