docker - 如何使用标记的中间图像进行最终构建?

标签 docker docker-multi-stage-build

我创建了一个多阶段构建。

  • 第一阶段:使用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 . First Step
  2. docker build -t website:latest . Second Step

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

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

感谢您坚持到底。我感谢任何反馈或建议。

最佳答案

我想你可能会使用:

COPY --from=website-builder:latest .....

关于docker - 如何使用标记的中间图像进行最终构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58536760/

相关文章:

c++ - 如何在保留符号链接(symbolic link)的同时在多阶段 Docker 构建的各个阶段之间复制库文件?

docker - docker API删除容器不起作用

Docker 无法连接到 X 服务器

windows - Windows 2016 上的 Docker 错误 "Client.Timeout exceeded while awaiting headers"

docker - 从另一个容器连接到 mysql 容器

dockerfile - 如何在多阶段 Docker 构建的阶段之间复制变量?

Docker 多阶段构建无法识别已安装的应用程序

c# - 从 .net Core 中的 webapi 调用 grpc 服务的策略

python - 密码学 Python Docker 多阶段构建