【发布时间】:2020-03-11 13:19:43
【问题描述】:
我正在尝试为一个对节点版本没有太多管理的旧项目简化开发 + 构建过程。为了构建用于测试和部署的 docker 映像,我希望能够拉取 .nvmrc 文件中定义的节点版本并使用它拉取节点基础 docker 映像。
是否已经有一个 docker base image 可以实现这样的东西,还是只是自己写的?
【问题讨论】:
标签: node.js docker npm continuous-integration nvm
我正在尝试为一个对节点版本没有太多管理的旧项目简化开发 + 构建过程。为了构建用于测试和部署的 docker 映像,我希望能够拉取 .nvmrc 文件中定义的节点版本并使用它拉取节点基础 docker 映像。
是否已经有一个 docker base image 可以实现这样的东西,还是只是自己写的?
【问题讨论】:
标签: node.js docker npm continuous-integration nvm
如果您可以控制 docker 的命令,则可以在基础映像中使用 docker build 参数 (https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact)
创建一个 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,但所有 build-args 都有据我测试,在第一个 FROM 语句之前声明。
这是一个示例,我使用此技巧来分解我的流星应用程序(将其转换为可以使用节点运行的应用程序)并将这些文件复制到具有所需节点版本的普通图像上:https://github.com/disney/meteor-base/issues/30
【讨论】: