使用 也有一段时间了,每次使用 docker help 的时候,我都很好奇 saveexport 的区别,由于本人一般比较倾向于用 Dockerfilevolume 来迁移和保存数据,所以对此两个功能没多做研究。今天闲来无事,便研究一下这两个命令的区别,做些知识储备。

单从字面上了解,可以知道 export 导出的是容器,save 保存的是镜像。

导出容器,顾名思义,就是将整个容器打包,打包的内容包括镜像,以及容器运行时所变更的文件和配置。import 以后,容器还原度较高,数据得以保存。

而保存镜像,则是将容器运行的镜像保存,容器运行时所做出的文件和配置变更将会丢失。load 之后运行,只能得到一个纯净的容器,之前容器运行的数据丢失。

那既然这样,直接导出容器不就好了,为什么还需要保存镜像这样一个功能呢。原因是,导出容器,只能导出容器相关镜像当前的 layer,无法获取镜像历史信息,也无法将镜像进行回滚;而保存镜像,则可以将镜像历史 layer 保存,从而可以得到镜像的完整信息,以及必要时回滚到以前的 layer。

总之,这两个功能是针对不同的对象而设立的,以便满足不同的导出需求。

需要额外注意的是,saveexport 默认都是输出到标准输出的,执行时需手动重定向到 tar 文件。比如: