在Docker中保存和导出有什么区别?

我在Docker玩了几天,我已经做了一些图片(这真的很有趣!)。 现在我想坚持我的工作,来到saveexport命令,但我不完全理解他们。

在Docker中saveexport什么区别?

简短的回答是:

  • save将获取图像:对于虚拟机或物理服务器,这将是安装.ISO映像或磁盘。 基本的操作系统。

    它将打包构build图像所需的所有链的图层和元数据。 然后,你可以加载这个“保存”的图像链到另一个docker实例,并从这些图像创build容器。

  • export将获取整个容器:就像一个普通虚拟机的快照。 当然,保存操作系统,也是你所做的任何改变,在容器寿命期间写入的任何数据文件。 这个更像是一个传统的备份。

    它会给你一个包含你的容器的文件系统的平坦的.tar文件。

编辑:因为我的解释可能仍然会导致混乱,我认为重要的是要明白,其中一个命令与容器工作,而另一个与图像工作。

  • 一个图像必须被认为是“死”或不可变的,从它开始的0个或1000个容器不会改变一个字节。 这就是为什么我早些时候与系统安装ISO进行比较。 甚至可能更接近live-CD。

  • 容器 “启动”图像并在其上添加一个附加图层。 此图层存储容器上的任何更改(创build/更改/删除的文件…)。

保存和导出命令有两个主要区别。

  1. 保存命令保存整个图像的历史和元数据,但导出命令只导出文件结构(没有历史和元数据)。 所以导出的tar文件会比保存的小。

  2. 当你使用导出的文件系统创build一个新的映像时,这个新映像将不包含你的Dockerfile中的任何USER,EXPOSE,RUN等命令。 只有文件结构将被传输。 所以,当你在Dockerfile中使用提到的关键字时,你不能使用export命令将图像传输到另一台机器 – 你总是需要使用save命令。

从技术上讲,保存/加载与可以是一个或多个图像(也称为图层)的存储库一起工作。 一个图像是一个回购单中的一个图层。 最后,一个容器是一个实例化的图像(运行与否)。

导出的图像将不会保存任何图层或历史logging信息,因此它将会变小,您将无法回滚。

保存的图像具有更大的图层和历史信息。

如果把这个给客户,Q是你想保留这些层?

Docker save图像提供的每个参数生成一个包含所有父层,所有标签+版本或指定repo:标签的tar文件回购。

Docker export容器中生成指定文件(可以是tar或tgz),内容不包含指定卷的内容。

docker保存需要在docker上使用图像,而docker输出需要在容器上使用(就像正在运行的图像)

保存用法

docker保存[选项]图像[图像…]

将图像保存到tar归档文件(默认stream式传输到STDOUT)

–help = false打印用法-o,–output =“”写入文件,而不是STDOUT

导出用法

docker出口[选项]集装箱

将容器文件系统的内容导出为tar存档

–help = false打印用法-o,–output =“”写入文件,而不是STDOUT