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

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

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

 

1、修改dockerfile

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

PS:友情提示,如果数据库用到了sqllite,.NET运行时镜像不建议使用alpine版本,会出现各种问题

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 ["dotn
etapi/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 应用程序发布概述

posted @ 2022-12-09 17:18  老铁你咋这么肥  阅读(494)  评论(0编辑  收藏  举报