我创建了一个多阶段构建。
- 第一阶段:使用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
相同.
如何实现构建器镜像由“发布”阶段使用并重写(如果发生更改)?如果无法做到这一点,这种情况下的最佳做法是什么?有吗?
感谢您坚持到底。我感谢任何反馈或建议。
最佳答案
我想你可能会使用:
COPY --from=website-builder:latest .....
关于docker - 如何使用标记的中间图像进行最终构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58536760/