有一个额外的docker容器的build设任务是一个很好的做法吗?

我有一个简单的Web应用程序与nginx Web服务器。 我使用grunt (节点模块)来准备我的资产进行生产(缩小等)。 现在我想知道是否应该在自己的容器中运行构build任务,或者只要一个容器就足够了。

哪种方法最好,为什么?

为构build和完成的应用程序分开的图像是一个很好的做法 – 这意味着您的最终应用程序图像是干净的,并具有最小的function集,只有你需要运行应用程序。 这使得更小的图像(更重要的是)更小的攻击面。 这是一个很好的写法 – 它被称为Docker Builder模式 。

或者,拥有包含应用程序和构build工具的单个映像的好处是可以减less开发过程中的pipe理开销 – 您不必将构build链接在一起或pipe理多个版本的多个映像。 但是,拥有更多臃肿的最终应用以及更多潜在的利用代价可能并不值得。

一个容器就够了。 在一台机器上运行的容器共享相同的操作系统内核。 所以,如果你想在多个容器上运行相同的构build,维护可能是一个问题。 最好,你可以在任何时候产生另一个图像。 尽pipe在每次成功构build之后保留快照是明智的。