更改docker图像层次结构

是否有可能取代泊坞窗图像层次结构中的图像? Docker提供了一个将图像插入到层次结构中的function,但是是否可以replace层次结构中的图像? 我的用例是用一些系统库创build一个映像,并在库升级到新版本之后用另一个replace这个映像。 我想通过replace基本映像来testing软件对较新库的兼容性。

一个解决scheme是使用以下方法:

  • build立一个基本的形象(或标记一个现有的)如mybase
  • FROM mybase开始的Dockerfile构build你的软件
  • 那么当你想用新库来testing时,用这些库build立一个新的mybase映像并重build你的软件

同样,当我有一个build立在Ubuntu之上的容器时,它通常从FROM ubuntu:12.04 。 在几个月内,当14.04 LTS将被释放时,我计划使用FROM ubuntu:14.04来更新我的Docker文件。

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

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

最困难的部分将是:

  • 解码图像祖先,以了解你应该保留哪些图层,并按照哪个顺序应用它们;
  • 应用图层,如果他们不仅添加/replace文件,而且删除一些。

如果你想探索这条路线,首先,确保你了解关于图层的基础知识 🙂