如何pipe理docker图像依赖关系(维护)

使用docker,你可以很好地创build基于其他图像的图像。 例如,你可以制作一个图像Java-jdk7(基于最新的Ubuntu LTS),并基于该图像创build弹性search和tomcat7(两者都需要java)。

所以,如果我不标记我的图像,我最终会得到以下( docker images摘录):

 ╔══════════════════════╦════════╦══════════════╗ ║ REPOSITORY ║ TAG ║ ID ║ ╠══════════════════════╬════════╬══════════════╣ ║ ubuntu ║ 12.04 ║ 8dbd9e392a96 ║ ║ quintenk/jdk7-oracle ║ latest ║ 8928245086f4 ║ ║ quintenk/tomcat7 ║ latest ║ 995cdb2cbfa8 ║ ║ quintenk/elastics ║ latest ║ 123abc456ef2 ║ ╚══════════════════════╩════════╩══════════════╝ 

现在的问题。 我应该如何维护这种依赖关系? 我如何执行维护一个图像和相关图像呢?

  1. 如果我更新我的jdk图像(例如apt-get upgrade ),我认为我不会损坏相关图像? 但是,我也假定依赖树不像你期望的那样。 [更新:我已经转载了这个,所以请看下面我自己的答案]
  2. 如果1是正确的,有什么方法可以让依赖的图像标志自己过时,并(希望)让他们重build自己?

还是要用一个版本号来标记容器,然后用增加的版本号标签手动重build和重新分配所有的依赖关系? 这将意味着Dockerfiles将需要被更改为更新。

更新:我在他们的演示文稿中find了泊坞窗网站上的以下图像。 不过,我不太清楚如何做到这一点(特别是如我所描述的依赖于其他图像)。

更新Docker容器的流

这是一个很好的用例。 请在Docker问题页面上提交增强请求。

现在一个简单的方法是维护Dockerfiles并从那里进行更新,当您想要进行有意的更改时重build映像。

在回答

如果我更新我的jdk图像(例如apt-get升级),我认为我不会损坏相关图像? 但是,我也假定依赖树不像你期望的那样。

我已经validation了这一点,通过更新一个依赖的图像,并检查依赖关系。 你得到的确是一个有效的状态,但是依赖的图像并不是基于你天真地期望的图像:

码头工依赖关系树

我觉得使用多阶段构build也可以帮助避免这样的陷阱。 它将帮助您保持每个应用程序的单个dockerfile。