多亏了Docker多阶段构建,我们可以在一个环境中编译一些工件,然后将它们放置在另一个环境中执行。

结果是有两个图像,其中最后一个对应于最后一个阶段,提供的标签按定义被标签;

问题:是否可以使用一个Dockerfile的多阶段构建为所有定义的阶段创建一系列标记的映像?

#1 楼

您可以构建和标记多阶段构建的任何阶段。只需对--target使用docker build选项。例如,通过层缓存,较早的步骤将从缓存中重用,而不会每次都从头开始重新运行,因此将构建运行到多次使用不同的目标。

如果绝对需要通过单个构建命令运行此目标,则可以解析构建的输出,获取中间步骤的图像ID,并标记该图像ID:

docker build --target jdk -t myapp-jdk:v1 .
docker build --target jre -t myapp:v1 .


评论


尝试在单个命令中执行此操作的原因之一:构建上下文不需要多次拉到一起。

–seveibar
18年8月25日在11:15

@seveibar好点。仅发送构建上下文中的任何更改,Buildkit都会更好地处理此问题,但目前仍处于试验阶段。

–BMitch
18年8月25日在11:23

开发人员正在寻找使用buildkit处理此问题的更好方法。最好遵循以下问题:github.com/moby/moby/issues/38197#issuecomment-438348158

–BMitch
19年2月15日在1:30