在 Docker 映像中复制 /node_modules 不是一个好主意吗?

Posted

技术标签:

【中文标题】在 Docker 映像中复制 /node_modules 不是一个好主意吗?【英文标题】:Is copying /node_modules inside a Docker image not a good idea? 【发布时间】:2018-06-15 11:20:13 【问题描述】:

我在网上看到的大多数/所有示例通常将package.json 复制到图像中,然后在图像中运行npm install。在构建服务器上不从外部运行npm install,然后只复制包括node_modules/ 文件夹在内的所有内容,是否存在破坏交易的原因?

我这样做的主要动机是,我们正在使用具有安全性的私有 npm 注册表,并从映像中运行 npm,我们需要弄清楚如何安全地嵌入凭据。此外,我们正在使用纱线,如果纱线在构建服务器上运行,我们可以跨项目利用纱线缓存。我想这些都有解决方法,但是从已经设置好所有内容的构建服务器运行 yarn/npm 似乎非常方便。

谢谢

【问题讨论】:

【参考方案1】:

那里的公共 Dockerfiles 试图提供通用的解决方案。 将依赖项编码为 package.json 可以只共享一个 Dockerfile,而不依赖于任何不公开的内容。

但是在运行时 Docker 并不关心文件是如何到达容器的。所以这取决于你,你如何将所有需要的文件推送到你的容器中。

附:考虑分层。如果你复制node_modules/下的东西,一步完成,只使用一层。

【讨论】:

感谢您的反馈,我可能应该提到这不是针对通用图像,而是针对特定应用程序。另外,感谢有关将 node_modules 放置到单独副本的提示。

以上是关于在 Docker 映像中复制 /node_modules 不是一个好主意吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Docker 文件中的 COPY 将文件夹从 Windows 主机操作系统复制到 Docker 映像中

如何将文件夹从我的主机挂载到自定义 docker 映像,在目录中使用 Dockerfile 进行设置? [复制]

如何在我的 ubuntu docker 映像中安装“ifconfig”命令? [复制]

SBT 本机打包程序不会将文件复制到 Docker 映像

将 docker 映像从一个 AWS ECR 存储库复制到另一个

云计算核心技术Docker教程:Docker存储写入时复制(CoW)策略