频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
树莓派也跑Docker和.NET Core - 农码一生 - 博客园
2019-05-09 14:36:29           
收藏   我要投稿

树莓派也跑Docker和.NET Core

树莓派是什么

树莓派就是一个卡片大小的迷你电脑。

系统">安装系统

有了电脑,我们当然得先安装系统。

系统下载

https://www.raspberrypi.org/downloads/raspbian/ ,我选择的Raspbian Stretch Lite,不带界面的最小安装。

下载win32diskimager(烧录系统)

https://sourceforge.net/projects/win32diskimager/

下载Advanced IP Scanner(扫描工具,用来扫描树莓派的ip)

https://www.tucows.com/download.html?software_id=267216&t=2

开始烧录

打开win32diskimager,插上读卡器。

准备工作

把SD插入树莓派,然后插上电源线。

sudo nano /etc/apt/sources.list
用#注释掉原文件内容,用以下内容取代:
deb https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

sudo nano /etc/apt/sources.list.d/raspi.list
用#注释掉原文件内容,用以下内容取代:
deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
deb-src https://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui

sudo apt-get update   #更新

安装自己想要的软件

sudo apt-get install vim      #安装vim
sudo apt-get install lrzsz    #安装rz sz
sudo apt-get install git      #安装git

另一种连接到树莓派的方式

如果上面的方式失败。你可以再准备一个网线,分别插入树莓派和笔记本。

静态IP设置
sudo vi /etc/dhcpcd.conf 

interface wlan0
static ip_address=IP/24
static routers=192.168.1.1
static domain_name_servers=114.114.114.114

防火墙
sudo apt-get install ufw   #安装
sudo ufw enable            #启用
sudo ufw default deny
sudo ufw disable           #关闭
sudo ufw status            #查看状态
sudo ufw allow 22          #允许外部访问ssh登录
sudo ufw allow 80          #允许外部访问80端口
sudo ufw delete allow 80   #禁止外部访问80 端口

安装Docker
curl -sSL https://get.docker.com | sudo sh

sudo systemctl enable docker   #自动启动
sudo systemctl start docker    #启动
sudo usermod -aG docker pi     #将 pi 或您的等效用户添加到 docker 组

运行.NET Coer程序

实际上树莓派和我们平时使用的PC或云主机还是有区别的,树莓派是ARM架构。而我们平时用的PC、云主机一般都是x86架构。

所有运行平台
https://github.com/dotnet/corefx/blob/master/pkg/Microsoft.NETCore.Platforms/runtime.json
https://docs.microsoft.com/en-us/dotnet/core/rid-catalog#

.netcore的docker镜像地址
https://hub.docker.com/_/microsoft-dotnet-core-sdk
https://hub.docker.com/_/microsoft-dotnet-core-aspnet

arm平台发布命令
dotnet publish -c Release -r linux-arm

遇到的问题和解决方法

正常情况我们Dockerfile可能是这样写的。

#基础镜像(用来构建镜像)
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
ENV TZ=Asia/Shanghai
RUN cp /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Beijing
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

#编译(临时镜像,主要用来编译发布项目)
FROM microsoft/dotnet:2.1-sdk AS publish
WORKDIR /src
COPY . .
WORKDIR /src/Host
RUN dotnet publish -c Release -o /app

#构建镜像
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
CMD ["dotnet", "Host.dll"]

这样在我们PC的Linux上没有任何问题。把docker镜像上传,然后在树莓派上下载运行。你会发现报错exec user process caused "exec format error"。

# ####修改##### 这里运行镜像改成arm32v7,也就是改成树莓派的CUP架构
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim-arm32v7 AS base
WORKDIR /app
EXPOSE 80
ENV TZ=Asia/Shanghai
RUN cp /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Beijing
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

#编译(临时镜像,主要用来编译发布项目)
FROM microsoft/dotnet:2.1-sdk AS publish
WORKDIR /src
COPY . .
WORKDIR /src/Host
RUN dotnet publish -c Release -o /app

#构建镜像
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
CMD ["dotnet", "Host.dll"]

结果还是报错,最后修改成

#基础镜像(用来构建镜像)
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim-arm32v7 AS base
WORKDIR /app
EXPOSE 80
ENV TZ=Asia/Shanghai
#  RUN命令修改成CMD
CMD cp /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Beijing
CMD ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

#编译(临时镜像,主要用来编译发布项目)
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS publish
WORKDIR /src
COPY . .
WORKDIR /src/Host
#RUN dotnet publish -c Release -o /app
RUN dotnet publish -r debian-arm -c Release -o /app

#构建镜像
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
CMD ["dotnet", "Host.dll"]

成功运行,完美。(RUN是在docker build的时候执行,而CMD 在docker run 时运行)

树莓派实例演示

演示地址:https://111.231.110.49:5088/

结束

最后给大家推荐一个开源项目quartzui:https://github.com/zhaopeiym/quartzui

docker run -v /fileData/quartzuifile:/app/File  --restart=unless-stopped --privileged=true --name quartzui -dp 5088:80 bennyzhao/quartzui:RaspberryPi  

运行在普通PC或云主机上

docker run -v /fileData/quartzuifile:/app/File  --restart=unless-stopped --privileged=true --name quartzui -dp 5088:80 bennyzhao/quartzui  

新建QQ群工控物联:995475200

相关推荐 https://www.ruanyifeng.com/blog/2017/06/raspberry-pi-tutorial.html https://www.cnblogs.com/haogj/p/4621926.html https://blog.docker.com/2017/09/docker-official-images-now-multi-platform/

点击复制链接 与好友分享!回本站首页
相关TAG标签 Core - - 博客园
上一篇:asp.net 获取当前,相对,绝对路径 - feiquan - 博客园
下一篇:EventBus 使用/架构/源码分析 - NeilZhang - 博客园
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站