我创建了一个多阶段构建。
- 第一阶段:使用 node:16.10-alpine 编译源码
- 第 2 阶段:使用 alpine nginx 映像,从第一阶段复制构建文件夹,移动配置,公开端口,添加入口点。
这是 Dockerfile:
# Builder
FROM node:10.16-alpine AS builder
... # Do stuff
# Release
FROM nginx:1.16.0-alpine
COPY --from=builder /usr/src/app/build /usr/share/nginx/html
... # Do stuff
ENTRYPOINT [ ... ]
我会说,非常直截了当。我知道您运行docker build -t website:latest .
它会创建一个中间图像<none>
,即构建器图像,如果源或package.json
.
所以,我的想法是builder
像这样标记步骤:docker build --target builder -t website-builder .
这样即使来源发生变化,它也只会使用相同的标签,而不是(如果我错了,请纠正我)创建其他图像。
如果我--target
先运行带有标志的构建并在没有它的情况下再次运行构建,则不会使用构建器。
总结一下:
docker build --target builder -t website-builder .
docker build -t website:latest .
<none>
创建了与 相同的新图像website-builder
。
如何实现构建器图像由“发布”阶段使用并重写(如果更改)?如果无法做到这一点,那么在这种情况下,最佳做法是什么?有吗?
谢谢你坚持。我感谢任何反馈或建议。