如何在樹莓派 + Docker部署.Net Core 3.1


1、 樹莓派安裝Docker

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

2、 在Visual Studio創建測試項目

3、 生成項目鏡像。這部分坑比較多,需要多注意一下,我也會把步驟拆分的更細。

項目創建后VS會在項目目錄下自動生成Docker鏡像的描述文件Dockerfile,但是如果我們直接使用這個文件生成鏡像就會提示下面的錯誤。

 這是因為下面標黃的部分路徑錯誤導致的,需要把前面標紅的目錄部分刪掉就可以了。

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

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

FROM build AS publish
RUN dotnet publish "RaspberryDockerDemo.csproj" -c Release -o /app/publish

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

  再次執行生成命令,你會發現又出錯了 -_-!

 根據錯誤提示我們注意到是沒找到入口的靜態main方法,事實上這個方法是有的,問題出在以下標黃的COPY命令部分,路徑又錯了,我們加上子目錄修改為正確的路徑。

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["RaspberryDockerDemo.csproj", "RaspberryDockerDemo/"]
RUN dotnet restore "RaspberryDockerDemo/RaspberryDockerDemo.csproj"
COPY . ./RaspberryDockerDemo
WORKDIR "/src/RaspberryDockerDemo" RUN dotnet build "RaspberryDockerDemo.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "RaspberryDockerDemo.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "RaspberryDockerDemo.dll"]

  經過各種路徑問題,我們終於成功生成了鏡像。

 使用docker ps命令我們可以看到我們剛生成的鏡像

后來我發現這個鏡像部署到樹莓派無法啟動,會提示如下錯誤

exec user process caused "exec format error"

這是因為樹莓派是基於ARM的CPU架構的,我們的開發機是普通的x86/64平台,導致生成的鏡像無法在ARM平台啟動,我們需要把Dockerfile中的配置修改為arm使用的環境。

同時也需要修改publish命令,增加-r參數來指定應用程序的目標平台為debian-arm。

-r參數說明參見文檔 https://docs.microsoft.com/zh-cn/dotnet/core/rid-catalog, https://github.com/dotnet/runtime/blob/master/src/libraries/pkg/Microsoft.NETCore.Platforms/runtime.json

修改后最終的文件如下:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1.3-buster-slim-arm32v7 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

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

FROM build AS publish
RUN dotnet publish "RaspberryDockerDemo.csproj" -r debian-arm -c Release -o /app/publish

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

接下就很簡單了,我們再次運行docker build命令生成鏡像,直接用docker save命令把鏡像導出到本地

docker save -o e:/raspdockerdemo.tar rasp/raspdockerdemo:v1

 

4、 部署鏡像到樹莓派

上傳文件到樹莓派,我使用的是WinSCP上傳的。然后使用 docker load命令導入我們的鏡像。

 

 現在就可以使用docker run命令來啟動我們的鏡像了。

 使用docker ps命令可以看到我們的鏡像已經成功在docker上跑起來了。

使用瀏覽器訪問 http://樹莓派IP:7000,就可以看到我們的測試項目已經可以訪問了。

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM