更改docker图像层次结构

时间:2014-01-13 10:45:52

标签: image hierarchy docker

是否可以替换泊坞窗图像层次结构中的图像? Docker提供了将图像插入层次结构的功能,但是可以替换层次结构中的图像吗?我的用例是拥有一些带有一些系统库的映像,并在库升级到更新版本后将此映像替换为另一个映像。我想通过替换基本映像来测试软件与新库的兼容性。

1 个答案:

答案 0 :(得分:4)

一种解决方案是使用以下方法:

  • 构建基本图像(或标记现有图像),例如, mybase
  • 使用以FROM mybase
  • 开头的Dockerfile构建您的软件
  • 然后,当您想要使用新库进行测试时,构建一个新的mybase图像(使用这些库)并重建您的软件

同样,当我在Ubuntu之上构建一个容器时,它通常以FROM ubuntu:12.04开头。在几个月内,当14.04 LTS发布时,我计划用FROM ubuntu:14.04更新我的Dockerfiles。

如果由于某些原因,您想要更新尚未使用Dockerfiles构建的容器,还有另一种方法,但它需要更深入的Docker图像格式知识,它是不能保证在所有情况下都能正常工作。

另一种方法是在现有图像上使用docker save。它将输出包含构成图像的所有图层的tarball。这些层将分为两组,我将任意称为“上”和“下”层。 “较低”层包含基本系统映像和要升级的库。 “上层”图层包含您想要保持不变的应用程序。我们的想法是将上层的layer.tar文件放在一边,然后构建新的基础图像(如果你愿意的话,下层的新版本),然后在新的下层上面应用上层

最困难的部分是:

  • 解码图像祖先以了解您应该保留哪些图层,以及应该按顺序应用它们;
  • 应用图层,如果他们不仅添加/替换文件,还删除一些。

如果你想探索这条路线,首先要确保你理解basics about layers: - )