将 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
我正在尝试为一个没有太多节点版本管理的旧项目简化开发 + 构建过程。为了构建用于测试和部署的 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