如何使用docker buildx逐个构建多架构镜像

3

当我想要使用 Docker 创建多架构构建时,我使用以下命令:

docker buildx build --push --platform <list of archs> -t <tag1> -t <tag2> .

这个工作完全正常,但似乎是同时构建图像。在大多数情况下,这可能是可以接受的,但在某些情况下,这似乎太沉重了,需要太多的RAM并导致网络故障(太多的并行连接)。

有没有办法按顺序构建图像?

我找到的唯一解决方案是分别为每个架构构建,然后使用“docker manifest create”进行组合:

docker buildx build --push --platform <arch1> -t <tag-arch1> .
docker buildx build --push --platform <arch2> -t <tag-arch2> .
[...]
docker manifest create ... --amend ...
docker manifest push

这可能没问题,但似乎每个图像都应该被推送到注册表中,以便"docker manifest create"能够进行组装。这并不是很好,因为它会污染我不想要的标签和图像列表。

是否有可能在本地图像上使用"docker manifest create",而无需将每个图像单独带有标签上传到注册表中?有没有更好的方法来顺序构建图像呢? 谢谢!

1个回答

2
目前,没有办法限制单个构建的并发性。这是buildkit当前的一个未解决问题。还有一个类似的问题,即允许设置cgroup限制,可以让您以较少的最大CPU时间并发运行构建,在某些用例中会产生类似的效果。

谢谢。一个一个平台建设,然后组装起来,而不一定要推动,这个怎么样? - Luca Carlon
@LucaCarlon 我还没有深入研究过清单工具。我看到的文档没有指示需要推送,但是这很有道理,因为需要推送才能在注册表上计算清单的摘要。我经常看到具有特定平台标签的存储库,这只是对相同清单的附加指针,因此不会增加磁盘空间(可能最多几KB用于指针)。 - BMitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接