将 nvmrc 节点版本与 Docker 节点基础映像相匹配

Matching nvmrc node version to Docker node base image

我正在尝试为一个没有太多节点版本管理的旧项目简化开发 + 构建过程。为了构建用于测试和部署的 docker 图像,我希望能够拉取 .nvmrc 文件中定义的节点版本并使用拉取节点基础 docker 图像那。

是否已经有docker基础镜像实现了这样的功能,还是自己写的?

如果您可以控制 docker 的命令,则可以在基础映像 (https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact)

中使用 docker 构建参数

创建一个 docker 文件,如下所示:

ARG  NODE_VERSION
FROM node:${NODE_VERSION}-alpine

# Add your commands here

执行以下命令:

docker build --build-arg NODE_VERSION=$(cat .nvmrc | tr -cd [:digit:].)-f Dockerfile .

添加 tr -cd [:digit:]. 将删除您在 .nvmrc 文件中的任何字符,例如换行符或可选前缀 v.

使用多阶段构建时 (https://docs.docker.com/develop/develop-images/multistage-build/) - 主要用于希望最终图像的大小尽可能小的情况,第二个图像也可以基于构建参数,但所有据我测试,build-args 必须在第一个 FROM 语句之前声明。

这是一个示例,我使用此技巧对我的流星应用程序进行去流星化(将其转译为可以 运行 使用节点的应用程序)并将这些文件复制到具有所需节点的纯图像版本:https://github.com/disney/meteor-base/issues/30