docker 生产代码构建

dae*_*aai 5 javascript production-environment docker docker-compose

当使用 docker 创建生产构建时,人们使用的编译和捆绑代码的策略是什么。

因此,在 docker 世界之外,我将创建一个构建(使用某种 npm 命令),它将创建一个 dist。代码(没有任何源代码,例如丑化和压缩的 javascript),然后我将 Web 服务器指向 dist 文件夹。

在 docker 世界中,您将在哪里构建代码,是在 docker 映像中还是在主机操作系统上,然后将 dist 文件夹复制到 docker 映像中?基本上我不想要整个 npm_modules 和 docker 镜像/容器中的所有源代码文件。

知道如何实现这一目标吗?

谢谢

Oli*_*rth 2

听起来您担心两个不同的、有效的问题:

  1. 确保隔离/可复制的生产环境。
  2. 确保隔离/可重现的构建环境(用于构建 #1)。

您可以使用您建议的方法来实现这两个目标 - 将构建步骤作为Dockerfile. 但这有您提到的缺点 - 您在运行时会留下所有源/开发工件,除非您采取明确的步骤将它们全部删除。

Docker 引入了多阶段构建来在一定程度上缓解这个问题 - 它有效地允许您将多个层“压缩”为一个层。但它并不能消除需要显式清理的问题。

因此,根据我的经验,最常见的解决方案确实是在外部构建工件,然后将COPY其添加到生产映像中。

这解决了问题#1,但没有解决问题#2。因此,更进一步 - 在 Docker 容器内构建您的 Docker 映像!CI 平台越来越多地支持这种方法,并将其作为一流的概念 - 请参阅Circle CI 的 Docker 执行器