首页 > 编程语言 >.NET6程序以容器的形式在arm架构中运行

.NET6程序以容器的形式在arm架构中运行

时间:2022-12-09 17:24:55浏览次数:60  
标签:dotnetapi 架构 -- publish dotnet NET6 docker arm

最近一个项目需要在arm开发板上运行.NET程序,并以docker容器的方式运行。

 因为开发板内存性能不能跟专用服务器比,所以.NET程序的编译和镜像打包放在公司的x86架构的服务器上,构建好镜像再放到板子上。

 

1、修改dockerfile

主要是asp.net和sdk的镜像替换成了arm架构的,dotnet指令需要加上参数  -r linux-arm64 --self-contained false 指定运行平台

FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal-arm64v8 AS base 
ENV ASPNETCORE_URLS http://+:8871
EXPOSE 8871


FROM mcr.microsoft.com/dotnet/sdk:6.0-focal-arm64v8 AS build
WORKDIR /src
#先拷贝项目文件,下载依赖 COPY ["dotnetapi/dotnetapi.csproj", "dotnetapi/"] RUN dotnet restore -r linux-arm64 "EdgeGatewayApi/EdgeGatewayApi.csproj"
#再拷贝全部文件 COPY . . WORKDIR "/src/EdgeGatewayApi" FROM build AS publish RUN dotnet publish -r linux-arm64 --self-contained false -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ENTRYPOINT ["dotnet", "dotnetapi.dll"]

 

2、构建镜像 必须使用 buildx 多平台构建(使用buildx有个非常重要的前提条件:docker版本为Docker 19.03+)

如何在docker上进行多平台构建请参考,请务必按以下文章完成,docker才可以使用buildx指令

https://docs.docker.com/build/building/multi-platform/

docker buildx  build --platform linux/arm64 -t dotnetapi . --load

 

3、后面都是正常流程,导出镜像,拷贝到arm服务器上,导入镜像,跑容器就行

 

 

参考资料:

https://docs.docker.com/build/building/multi-platform/

.NET 应用程序发布概述

标签:dotnetapi,架构,--,publish,dotnet,NET6,docker,arm
From: https://www.cnblogs.com/arthaslcm/p/16969498.html

相关文章