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>,即构建器图像,如果源或package.json.

所以,我的想法是builder像这样标记步骤:docker build --target builder -t website-builder .这样即使来源发生变化,它也只会使用相同的标签,而不是(如果我错了,请纠正我)创建其他图像。

如果我--target先运行带有标志的构建并在没有它的情况下再次运行构建,则不会使用构建器。

总结一下:

  1. docker build --target builder -t website-builder . 第一步
  2. docker build -t website:latest . 第二步

<none>创建了与 相同的新图像website-builder

如何实现构建器图像由“发布”阶段使用并重写(如果更改)?如果无法做到这一点,那么在这种情况下,最佳做法是什么?有吗?

谢谢你坚持。我感谢任何反馈或建议。

4

1 回答 1

1

我想你可以使用:

COPY --from=website-builder:latest .....
于 2019-10-24T08:03:14.383 回答