树莓派上在Docker中跑.Net Core

树莓派上在Docker中跑.Net Core

运行和开发环境

运行环境:树莓派3b,raspbian系统,已经安装Docker 。
开发环境:windows 10系统,vs 2019

测试代码编写

vs2019新建了一个名为RaspBianDockerDemo的DotNetCore 3.1控制台程序,并添加Docker支持。

Dockerfile的配置

使用Dockerfile多阶段构建.Net Core应用镜像
平常情况下,Dockerfile的内容是这样的

#FROM 是指定 基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。
#每一条 FROM 指令都是一个构建阶段,多条 FROM 就是多阶段构建,虽然最后生成的镜像只能是最后一个阶段的结果,但是,能够将前置阶段中的文件拷贝到后边的阶段中,这就是多阶段构建的最大意义。
#AS 是将编译阶段命名为 base 

#runtime仅包含某个.NET实现版本的程序集格式、API、功能兼容性等的描述信息库。仅能运行程序,用以缩小镜像文件的大小。
FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim AS base 

#使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录。
WORKDIR /app

#SDK包含相应.NET实现的全套运行时、MSBuild等生成工具、编译器等开发所需的一切,包含目标包。
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build

WORKDIR /src

#COPY <源路径>... <目标路径>  COPY指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
COPY ["RaspBianDockerDemo/RaspBianDockerDemo.csproj", "RaspBianDockerDemo/"]

#RUN 指令是用来执行命令行命令的。由于命令行的强大能力,RUN 指令在定制镜像时是最常用的指令之一。dotnet restore 是.NET Core CLI的一个基本命令,功能是使用 NuGet 还原依赖项以及在 project 文件中指定的特定于项目的工具。 
RUN dotnet restore "RaspBianDockerDemo/RaspBianDockerDemo.csproj"

#将本地计算机的当前工作目录复制到容器的当前工作目录中。
COPY . .

WORKDIR "/src/RaspBianDockerDemo"

#dotnet build 是.NET Core CLI的一个基本命令,功能是将项目及其依赖项生成为一组二进制文件。 二进制文件包括扩展名为 .dll 的中间语言 (IL) 文件中的项目代码。
RUN dotnet build "RaspBianDockerDemo.csproj" -c Release -o /app/build

FROM build AS publish

#dotnet publish 是.NET Core CLI的一个基本命令,功能是编译应用程序、读取 project 文件中指定的所有依赖项并将生成的文件集发布到目录。 
RUN dotnet publish "RaspBianDockerDemo.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app

#COPY 指令的 --from=publish参数,功能是从前边的publish阶段中拷贝文件到当前阶段中
COPY --from=publish /app/publish .

# 指定容器运行时入口程序
ENTRYPOINT ["dotnet", "RaspBianDockerDemo.dll"]

但是树莓派是arm32位的,运行上面Dockerfile构建镜像会提示错误

exec user process caused "exec format error"

通过hub docker上查找了.net core的资料(链接),需要改成Linux arm32 Tags

Dockerfile内容如下


FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim-arm32v7 AS base //第一处修改 将3.1-buster-slim 改成 3.1-buster-slim-arm32v7
WORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["RaspBianDockerDemo/RaspBianDockerDemo.csproj", "RaspBianDockerDemo/"]
RUN dotnet restore "RaspBianDockerDemo/RaspBianDockerDemo.csproj"
COPY . .
WORKDIR "/src/RaspBianDockerDemo"
RUN dotnet build "RaspBianDockerDemo.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "RaspBianDockerDemo.csproj" -c Release -r debian-arm -o /app/publish //第二处修改 增加 -r debian-arm

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "RaspBianDockerDemo.dll"]

生成发布,在树莓派成功运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值