gpt4 book ai didi

docker - 在 ARM 上构建 X86 docker 镜像?

转载 作者:行者123 更新时间:2023-12-02 17:54:59 25 4
gpt4 key购买 nike

我在 上设置了构建管道臂 正在构建 .NET Core 应用程序的设备。构建管道的最后一步是将编译的 .NET Core 应用程序存储在 docker 镜像中。
是否可以将应用程序存储在 的 .NET Core 运行时镜像中? X86 ?
我希望 .NET Core 应用程序不关心系统架构,只要部署了 .NET 框架。而且那个 docker 不需要启动 X86 镜像来生成新镜像:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

COPY /my-application/build/ /app/

EXPOSE 80/tcp

WORKDIR /app
ENTRYPOINT ["dotnet", "app.dll"]

最佳答案

如果我正确理解您的问题,您有一台运行管道的 ARM 机器,并且您希望它同时编译 ARMx86图片?
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 .
实际上,它为每个平台推送一个图像和一个 manifest文件加入这些图像。如果其他 docker 客户端想要运行该镜像,则会加载 list 并选择所需的平台。
在 docker 编译中
为此,您需要在 docker 管道中编译图像。无论如何建议这样做,因为在本地编译它然后将其复制到容器将导致不同的镜像,具体取决于构建镜像的机器上安装的软件。
关注 instructions here创建一个需要的dockerfile。
要求
为此,基础镜像还必须支持多种架构。您可以在 docker 注册表中进行检查。 dotnet 核心镜像就是这种情况。但是,如果您的基础镜像不支持该平台,则它可能无法正常工作。但是,重新编译整个镜像应该可以工作(只要基本镜像支持该平台)。
见实战
您还有一个 github action用于在 github runner 中安装 buildx。我将它用于我的几个库,请参阅此 workflow file或结果 here

关于docker - 在 ARM 上构建 X86 docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62592668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com