jwi*_*mer 8 docker .net-core asp.net-core multiarch
我已经在构建.NET Core 应用程序的ARM设备上设置了构建管道。构建管道的最后一步是将编译的 .NET Core 应用程序存储在 docker 映像中。
是否可以将应用程序存储在X86的 .NET Core 运行时映像中?
我希望 .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"]
Run Code Online (Sandbox Code Playgroud)
如果我正确理解您的问题,您有一台运行管道的 ARM 机器,并且您希望它同时编译图像ARM和x86图像?
你当然可以。您可以使用buildx为您管理交叉编译。所以继续安装buildx。
在设置 buildx 并配置它之后。你可以运行:
docker buildx build \
--platform linux/amd64,linux/386,linux/arm/v7 \
--push \
-t docker_user/docker_image:latest \
.
Run Code Online (Sandbox Code Playgroud)
由于基本图像,这将适用于您想要的每个平台。您可以更改要为其构建的平台。
什么buildx呢,它模拟目标平台和执行你经常泊坞窗文件中的所有步骤,如果该平台上运行。Buildx 还标记了图像、-t参数。并将其推送到选择的 docker 注册表,如果您指定--push.
实际上,它推送每个平台的图像和加入这些图像的清单文件。如果其他 docker 客户端想要运行该映像,则会加载清单并选择所需的平台。
为此,您需要在 docker 管道中编译图像。无论如何建议这样做,因为在本地编译它然后将其复制到容器将导致不同的映像,具体取决于构建映像的机器上安装的软件。
为此,基础镜像还必须支持多种架构。您可以在 docker 注册表中进行检查。dotnet 核心映像就是这种情况。但是,如果您的基础映像不支持该平台,则它可能无法正常工作。但是,重新编译整个映像应该可以工作(只要基本映像支持该平台)。
您还有一个用于在 github 运行器中安装 buildx的github 操作。我将它用于我的几个库,请参阅此工作流程文件或此处的结果
| 归档时间: |
|
| 查看次数: |
4429 次 |
| 最近记录: |