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

时间:2014-03-26 08:59:23

标签: docker

我正在玩Docker几天,我已经制作了一些图像(非常有趣!)。现在我想继续我的工作并转到saveexport命令,但我并不完全理解它们。

Docker中saveexport之间的区别是什么?

6 个答案:

答案 0 :(得分:147)

简短的回答是:

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

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

  • export将获取整个容器:就像常规VM的快照一样。当然,也可以保存操作系统,也可以保存在容器生命周期内写入的任何数据文件。这个更像是传统的备份。

    它将为您提供包含容器文件系统的.tar存档。

编辑:由于我的解释可能仍会引起混淆,我认为重要的是要了解其中一个命令适用于容器,而另一个适用于图像。

  • 图片必须被视为“死亡”图片或者不可变,从它开始0或1000个容器不会改变单个字节。这就是我之前与系统安装ISO进行比较的原因。它可能更接近现场CD。

  • 容器"靴子"图像并在其上添加一个附加图层。该层存储容器上的任何更改(创建/更改/删除的文件...)。

答案 1 :(得分:11)

saveexport命令之间存在两个主要差异。

  1. save命令使用历史记录和元数据保存整个图像,但export命令仅导出文件结构(没有历史记录和元数据)。因此导出的tar文件将小于保存的文件。

  2. 使用导出的文件系统创建新图像时,此新图像将不包含Dockerfile中的任何USEREXPOSERUN等命令。只传输文件结构。 因此,当您在Dockerfile中使用提到的关键字时,您无法使用export命令将图像传输到另一台计算机 - 您需要始终使用save命令。

答案 2 :(得分:3)

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

保存的图片包含图层和历史信息,因此更大。

如果将此情况交给客户,Q是否要保留这些图层?

答案 3 :(得分:2)

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

答案 4 :(得分:1)

Docker 保存图像提供的每个参数生成一个tar文件仓库,其中包含所有父图层,所有标记+版本或指定的repo:tag。 / p>

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

docker 保存需要在docker镜像上使用,而docker export 需要在容器上使用(就像运行图像一样)

保存用法

  

docker save [OPTIONS] IMAGE [IMAGE ...]

     

将图像保存到tar存档(默认情况下流式传输到STDOUT)

     

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

导出用法

  

docker export [OPTIONS] CONTAINER

     

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

     

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

答案 5 :(得分:1)

exportcontainer (filesystem)-> image tar
importexported image tar-> image。只有一层。

saveimage-> image tar
loadsaved image tar-> image。所有层将被恢复。

来自 Docker in Action,第二版 p190。

分层图像保留了图像的历史记录,容器创建元数据以及可能已被删除或覆盖的旧文件。

平整的图像仅包含文件系统上的当前文件集。