Docker容器跨服务器迁移之备份恢复流程步骤

2023-06-01 00:00:00 备份 迁移 容器

迁移容器同时涉及到两个操作,备份和恢复。

我们可以将任何一个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这样的数据映射。 


相关文章