37

使用 docker,您可以非常好地基于其他图像创建图像。例如,您可以制作一个图像 Java-jdk7(基于最新的 Ubuntu LTS),并在此基础上创建图像 elastic-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 图像和从属图像以及?

  1. 如果我更新我的 jdk 映像(apt-get upgrade例如),我假设我没有损坏依赖映像?但是,我还假设依赖关系树不再像您期望的那样。[更新:我已经复制了这个,所以请看下面我自己的答案]
  2. 如果 1 是正确的,有什么方法可以让依赖图像将自己标记为过时,并且(希望)让它们重建自己?

或者是用版本号标记容器,并手动重建和重新分配所有依赖项并增加版本号标记的方法?这意味着需要更改 Dockerfile 以进行更新。

更新:我在他们的演示文稿中的 docker 网站上找到了以下图片。但是,我不太确定如何执行此操作的步骤(尤其是我描述的对其他图像的依赖)。

docker 容器的更新流程

4

3 回答 3

9

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

目前一种简单的方法是维护 Dockerfiles 并从那里更新,当您想要进行有意更改时重建图像。

于 2013-07-30T17:41:02.033 回答
7

作为回答

如果我更新我的 jdk 映像(例如 apt-get upgrade),我假设我没有损坏依赖映像?但是,我还假设依赖关系树不再像您期望的那样。

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

docker依赖树

于 2013-07-31T08:27:42.183 回答
0

我觉得使用多阶段构建也有助于避免此类陷阱。它将帮助您为每个应用程序保留单个 dockerfile。

于 2017-05-21T00:16:51.963 回答