docker export_docker:export/save/commit谁才是你心中那个她

45e01a29cda19761b9ccac169eb9a35b.png

上一章我们对docker commit 进行了简单的剖析,相信大家对commit的使用场景有一定了解,今天再讲两个docker备份与恢复的常用命令。

老范:Docker运维:docker commit 真有那么香么?​zhuanlan.zhihu.com
4ba196d9fe9857f5512eebfa4adff036.png

那就是export和save。

一个是导出镜像、一个是保存镜像,执行后的结果都一样——得到一个tar文件包。简单从字面上的描述,我们做一个区分:

commit:提交容器到镜像,实现容器持久化;

export:导出容器和镜像,实现容器内容持久化;

save:导出镜像文件,实现镜像内容持久化。

初学docker的老范,看到这三个命令的时候,真有种皇帝选妃的感觉:美人,你在哪,朕抓到你了。

da661f32a9251dc9d0860932ab6669db.png

但真到了实际使用的时候,发现却一个也用不上。今天我们就实战区分一下。

第一,export 对当前的容器状态建立快照,并持久化为tar文件

首先看下面这个镜像,镜像ID是

37641db67737522b2f00cbde0ce71542.png

我们通过inspect命令看一下这个镜像的层文件

5dc91ddfef7d5cf6cc3d890a77048205.png
从上到下一共17层

现在我从这个镜像的实例化的容器里做一些事情,我新建一个lxy文件夹。

然后,通过export命令将这个容器持久化为7b.tar

4eee15f89749f8832438297a729ce058.png

然后,通过import的方式,将这个导出的tar包镜像化

再来看这个镜像的层文件

c1f42583b5aac67c886f304f54143d20.png

发现这个镜像只剩了一层,其他的层级全没有了,整个镜像体积较之前也小了一些,一共是436MB,之前是452MB。

第二,save 对当前的镜像进行持久化,形成tar文件

还是这个镜像,我们使用save的方法持久化为lxy.tar

然后,通过load的方式将这个导出的tar文件镜像化

再来看这个镜像的层文件

一点变化没有,同时,镜像大小是452MB。

aaa9d4296b6759650e50e2047652675b.png

第三,commit 把当前容器的内容新建一个层文件,覆盖在旧的镜像文件层之上

还是这个镜像,这个容器,我们使用commit的方式进行提交,

8fdcf493eab1afca3a654a681252e92c.png

然后查看这个镜像的层及文件

50797ec3b549cb6f06bcf0a633b79a24.png

发现明显多了一层,也就是最下边这一层,尾数1200。

这样分别有什么用武之地呢?

第一,commit+save模式:保留了一个镜像的所有历史文件和元数据,它把容器的内容作为一个新的层覆盖在原有镜像之上,然后实现持久化。原有的镜像没有改变。

这样的好处是,当我发现这个commit+save的镜像包有问题的时候,可以快速回滚到之前的镜像版本。

这波操作666

你想,之前我们是怎么做产品版本管理的?每发一个版本就要生成一个安装部署包,久而久之版本越来越多,部署包的文件夹越来越大。部署实施人员在客户单位想回滚版本的时候可能只能够重新部署。

删除新版本-->拷贝旧版本-->安装旧版本.....

几个小时过去了。

有了docker这个回滚特性,那就直接回滚到镜像的某个层,然后再实例化一个容器就可以了。

几秒钟的工作量。

第二,export模式:打扫干净屋子再请客。把之前镜像的层级删干净,只保留最新的快照文件。

这种情况适用于我不需要回滚,当前的状态即是最佳状态的时候。这样做的好处是,删除了没有用处的历史数据,同时保留了镜像具有的所有功能,关键是镜像文件还小的很

一举三得。

怎么样,你搞清喜欢哪个了么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值