我对这两个选择有点困惑。他们似乎有血缘关系。然而,它们并不是真正兼容的。
例如,使用 Dockerfiles 似乎意味着您不应该真正地提交图像,因为您应该真正地在 git 中跟踪 Dockerfile 并对其进行更改。那么对于什么是权威就没有歧义了。
然而,图像提交看起来真的很不错。它非常棒,您可以直接修改容器并标记更改以创建另一个映像。我知道您甚至可以从映像提交历史中获得类似于文件系统的东西。太棒了。但是你不应该使用 Dockerfiles。否则,如果您提交了一个映像,就必须返回到 Dockerfile 并进行一些更改,以表示所做的操作。
所以我很纠结。我喜欢图像提交的想法: 您不必在 Dockerfile 中表示您的图像状态——您可以直接跟踪它。但是我对于放弃某种清单文件的想法感到不安,这种文件可以让您快速地了解图像中的内容。在同一个软件包中看到两个似乎不兼容的特性也是令人不安的。
有人有什么想法吗?使用图像提交被认为是不好的做法吗?或者我应该放弃我的附件,从我的木偶时代的清单文件?我该怎么办?
更新 :
对于那些认为这是一个基于观点的问题的人,我不太确定。它有一些主观的特性,但我认为它主要是一个客观的问题。此外,我相信关于这个话题的好的讨论将是有益的。
最后,我希望阅读本文的读者能够更好地理解 Dockerfiles 和图像提交是如何相互关联的。
更新-2017/7/18 :
我最近发现了图像提交的合法用途。我们刚刚在公司建立了一个 CI 管道,在管道的一个阶段,我们的应用程序测试在一个容器内运行。我们需要在测试运行程序进程生成覆盖率结果(在容器的文件系统中)并且容器已经停止运行之后,从退出的容器中检索覆盖率结果。我们通过提交已停止的容器来创建一个新的映像,然后运行显示覆盖率文件并将其转储到 stdout 的命令,从而使用 image 提交来完成此操作。所以有这个很方便。除了这种非常特殊的情况,我们还使用 Dockerfiles 来定义环境。