使用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个图像和相关图像?
apt-get upgrade
),我认为我不会破坏相关图像?但是,我还假设依赖树不再像您期望的那样。 [更新:我已经复制了这个,所以请看下面我自己的答案] 或者是使用版本号标记容器的方法,并使用增加的版本号标记手动重建和重新分发所有依赖项?这意味着需要更改Dockerfiles才能进行更新。
更新: 我在presentation的docker网站上找到了以下图片。但是,我不太确定如何执行此操作的步骤(特别是对我所描述的其他图像的依赖性)。
答案 0 :(得分:9)
这是一个很好的用例。请在Docker issues page上提交增强请求。
现在一种简单的方法是维护Dockerfiles并从那里进行更新,在您想要进行有意识的更改时重建图像。
答案 1 :(得分:7)
回答
如果我更新我的jdk图像(例如apt-get upgrade),我假设我没有破坏依赖图像?但是,我还假设依赖树不再像您期望的那样。
我通过更新依赖图像并检查依赖项来验证这一点。你得到的确是一个有效的状态,但依赖的图像不是基于你天真期望的图像:
答案 2 :(得分:0)
我觉得使用multi-stage builds也有助于避免这些陷阱。它将帮助您为每个应用程序保留单个dockerfile。