Image 更改docker图像层次结构

Image 更改docker图像层次结构,image,hierarchy,docker,Image,Hierarchy,Docker,是否可以替换docker图像层次结构中的图像?Docker提供了将图像插入层次结构的功能,但是否可以替换层次结构中的图像?我的用例是在一些系统库中有一个映像,并在库升级到新版本后用另一个映像替换这个映像。我想通过替换基本映像来测试软件与较新库的兼容性。一种解决方案是使用以下方法: 构建一个基本映像或将现有映像标记为mybase 使用Dockerfile从mybase开始构建软件 然后,当您想要使用新库进行测试时,使用这些库构建一个新的mybase映像并重新构建您的软件 同样,当我在Ubuntu上

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

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

构建一个基本映像或将现有映像标记为mybase 使用Dockerfile从mybase开始构建软件 然后,当您想要使用新库进行测试时,使用这些库构建一个新的mybase映像并重新构建您的软件 同样,当我在Ubuntu上构建一个容器时,它通常从Ubuntu:12.04开始。几个月后,当14.04 LTS发布时,我计划用ubuntu:14.04更新我的Dockerfiles

如果出于某些原因,您希望更新未使用Docker文件构建的容器,还有另一种方法,但它需要对Docker图像格式有更深入的了解,并且不能保证在所有情况下都能工作

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

最困难的部分是:

解码图像祖先,以了解应保留哪些层,以及应用它们的顺序; 应用层,如果它们不仅添加/替换文件,还删除一些文件。
如果您想探索这条路线,首先,请确保您了解:-

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

构建一个基本映像或将现有映像标记为mybase 使用Dockerfile从mybase开始构建软件 然后,当您想要使用新库进行测试时,使用这些库构建一个新的mybase映像并重新构建您的软件 同样,当我在Ubuntu上构建一个容器时,它通常从Ubuntu:12.04开始。几个月后,当14.04 LTS发布时,我计划用ubuntu:14.04更新我的Dockerfiles

如果出于某些原因,您希望更新未使用Docker文件构建的容器,还有另一种方法,但它需要对Docker图像格式有更深入的了解,并且不能保证在所有情况下都能工作

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

最困难的部分是:

解码图像祖先,以了解应保留哪些层,以及应用它们的顺序; 应用层,如果它们不仅添加/替换文件,还删除一些文件。
如果您想探索这条路线,首先,请确保您理解:-

事实上,这可能是一个解决方案。我的计划是建立一个高效的系统,该系统可以提交并推送到私人docker索引中。带有真实数据的容器不能被Dockerfile引导映像所替代,这就是为什么我的想法是替换较低的层。不知道这是否可能。好的,明白了。让我更新我的答案,我可能有一些东西给你:确实有趣:我将探索这条路线。已经阅读了图层基础知识。你知道一个描述分层技术细节的文档吗?实际上,解决这个问题的方法是合成,对吗?目前不在Docker,但会很好。然后可以更新图像层次中的一个片段。github上的问题(通常称为include指令)中对此有很多讨论。事实上,这可能是一个解决方案。我的计划是建立一个高效的系统,该系统可以提交并推送到私人docker索引中。带有真实数据的容器不能被Dockerfile引导映像所替代,这就是为什么我的想法是替换较低的层。不知道这是否可能。好的,明白了。让我更新我的答案,我可能有一些东西给你:确实有趣:我将探索这条路线。已经阅读了图层基础知识。
你知道一个描述分层技术细节的文档吗?实际上,解决这个问题的方法是合成,对吗?目前不在Docker,但会很好。然后可以更新图像层次中的一个片段。github上的问题中有很多关于这一点的讨论,这些问题通常被称为include指令。