如何删除生产 docker 镜像中的开发依赖项

Ces*_*sar 4 production node.js node-gyp docker

将 dockerized node.js 运送到生产环境时,运送包含开发依赖项的映像是否正确?

我不是在谈论开发依赖项 不是devDependenciespackages.json中列出的,我的意思是gcc,python,node-gyp,其他一些*-dev包,包含一堆头文件,静态库。所有这些都需要编译一些节点依赖项(如 node-sass)

一个想法可能是两阶段构建,一个包含所有 *-dev 依赖项的映像,在其中构建内容,然后将结果导出到另一个仅包含二进制文件的新映像。

  • 优点:最终的“生产”图像很小
  • 缺点:不是构建图像的标准方式

一般来说,我想在 docker 镜像中分发的任何编译软件不应该包含用于构建二进制文件的编译器、头文件和工具。

Séb*_*ien 5

如果您希望某些内容不包含在最终映像中,则必须仅在一层(一个 RUN 语句)中执行所有相关命令。

类似于以下内容(伪代码):

RUN install dev-dependencies && build your-project && uninstall dev-dependencies
Run Code Online (Sandbox Code Playgroud)

只为 RUN 语句创建了一层,它不会包含开发依赖项。