如果我正确理解您的问题,您有一台运行管道的 ARM 机器,并且您希望它同时编译图像ARM
和x86
图像?
Buildx - 用于跨平台镜像构建
你当然可以。您可以使用buildx为您管理交叉编译。所以继续安装buildx。
设置好 buildx 并进行配置后。你可以运行:
docker buildx build \
--platform linux/amd64,linux/386,linux/arm/v7 \
--push \
-t docker_user/docker_image:latest \
.
由于基本映像,这将适用于您想要的每个平台。您可以更改要为其构建的平台。
buildx的作用是模拟目标平台并执行常规docker文件中的所有步骤,就像在该平台上运行一样。Buildx 还标记了图像、-t
参数。并将其推送到选择的 docker 注册表,如果您指定--push
.
实际上,它会为每个平台推送一个图像以及一个加入这些图像的清单文件。如果其他 docker 客户端想要运行该映像,则会加载清单并选择所需的平台。
在 docker 编译中
为此,您需要在 docker 管道中编译映像。无论如何都建议这样做,因为在本地编译它然后将其复制到容器中会产生不同的图像,具体取决于构建图像的机器上安装的软件。
按照此处的说明创建所需的 dockerfile。
要求
为此,基础镜像还必须支持多种架构。您可以在 docker 注册表中检查这一点。dotnet 核心映像就是这种情况。但是,如果您的基础映像不支持该平台,它可能无法正常工作。但是,重新编译整个映像应该可以工作(只要基础映像支持该平台)。
看实际
您还有一个用于在 github 运行器中安装 buildx 的github 操作。我将它用于我的几个库,请参阅此工作流文件或此处的结果