如何使用标记的中间图像进行最终构建?
How to use tagged intermediate image for final build?
我创建了一个多阶段构建。
- 第 1 阶段:使用 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>
,这是构建器图像,如果没有更改源或 [=13],稍后可能会使用它=].
所以,我的想法是像这样标记 builder
步骤:docker build --target builder -t website-builder .
这样即使来源发生变化,它也只会使用相同的标记而不是(请纠正我如果我错了)创建其他图像。
如果我 运行 首先使用 --target
标志构建,然后 运行 在没有它的情况下再次构建,则不会使用生成器。
总结一下:
docker build --target builder -t website-builder .
docker build -t website:latest .
已创建新的 <none>
图像,与 website-builder
相同。
如果更改,我怎样才能实现 'Release' 阶段使用并重写构建器映像?如果无法做到这一点,那么在这种情况下最佳做法是什么?有吗?
感谢您的坚持。我感谢任何反馈或建议。
我想你可以使用:
COPY --from=website-builder:latest .....
我创建了一个多阶段构建。
- 第 1 阶段:使用 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>
,这是构建器图像,如果没有更改源或 [=13],稍后可能会使用它=].
所以,我的想法是像这样标记 builder
步骤:docker build --target builder -t website-builder .
这样即使来源发生变化,它也只会使用相同的标记而不是(请纠正我如果我错了)创建其他图像。
如果我 运行 首先使用 --target
标志构建,然后 运行 在没有它的情况下再次构建,则不会使用生成器。
总结一下:
docker build --target builder -t website-builder .
docker build -t website:latest .
已创建新的 <none>
图像,与 website-builder
相同。
如果更改,我怎样才能实现 'Release' 阶段使用并重写构建器映像?如果无法做到这一点,那么在这种情况下最佳做法是什么?有吗?
感谢您的坚持。我感谢任何反馈或建议。
我想你可以使用:
COPY --from=website-builder:latest .....