树莓派是什么

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

安装系统

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

系统下载

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

下载win32diskimager(烧录系统)

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

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

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

开始烧录

打开win32diskimager,插上读卡器。



完成后在sd卡根目录添加两个文件ssh wpa_supplicant.conf



wpa_supplicant.conf的内容

准备工作

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



插上电源它就会自动开机启动了。使用Advanced IP Scanner扫描树莓派的ip(如果过了两分钟还是没有扫描到,可以尝试重新往SD添加wpa_supplicant.conf文件)



然后使用xshell连接。从现在开始,后面的操作你会感觉和普通linux没太大区别。



更换国内源(为了提高下载速度)

sudo nano /etc/apt/sources.list
用#注释掉原文件内容,用以下内容取代:
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi sudo nano /etc/apt/sources.list.d/raspi.list
用#注释掉原文件内容,用以下内容取代:
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
deb-src http://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

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

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

然后打开“网络和共享中心”,会多了一个本来连接。点击上面的正常网络。



然后WIN + R,cmd进入命令行,输入 arp -a查看网络ip。



一般情况第一个ip就是树莓派的ip。(这里我显示不是,因为我已经在无线连接设置了ip)

静态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 Core程序

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

也就是说我们在PC机上能跑的程序放树莓派上很可能跑不起来,除非你做了ARM平台的发布。如:dotnet publish -r debian-arm -c Release

所有运行平台
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"

然后我又尝试直接在树莓派上编译运行,居然成功了。因性能问题,本以为会编译失败的。(说明树莓派的性能真不错)不过树莓派毕竟不是PC,性能肯定会跟不上。

所以还是得想办法在普通PC编译,然后在树莓派上运行。

修改改Dockerfile

# ####修改##### 这里运行镜像改成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 时运行)

至于最开始的Dockerfile文件为什么也可以在树莓派上编译运行。那是因为微软提供的docker镜像做了处理,pull的时候会识别环境然后下载对应的镜像。

我们可以通过docker history --no-trunc 镜像ID查看历史构建命令

树莓派实例演示

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

本演示地址是我本地树莓派通过内网穿透的方式提供,也就是说你方式的直接是我家里的树莓派。因为内网网速问题,你访问速度可能会很慢。

因为树莓派耗电量低,环保无噪音。不仅可以996甚至7*24都没问题,一个月耗电也就三四度。所以可以做很多有趣的东西,随时待命可唤醒。

结束

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

基于Quartz.NET 3.0的web管理界面,开箱即用。也可以完美运行在树莓派上。

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

相关推荐

树莓派也跑Docker和.NET Core的更多相关文章

  1. Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)

    上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1) 服务器版本 Ubuntu 16.04 LTS. 本 ...

  2. 简单四步開始树莓派上的Docker之旅

    大概这篇博文发表之后,应该算是我个人的第一篇翻译作品了,翻译的可能不是非常到位,望各位看官大刀砍过来. 原文链接:http://resin.io/blog/docker-on-raspberry-pi ...

  3. [IOT] - Raspberry Pi 4 Model B 系统初始化,Docker CE + .Net Core 开发环境配置

    本教程为在 Docker 中配置 .Net Core,如果想在树莓派 Raspbian 系统中配置 .Net Core,请参考:[IOT] - 在树莓派的 Raspbian 系统中安装 .Net Co ...

  4. Docker 创建 Jira Core(Jira SoftWare) 7.12.3 中文版

    目录 目录 1.介绍 1.1.什么是 JIRA Core? 1.2.什么是 JIRA SoftWare 2.JIRA 的官网在哪里? 3.如何下载安装? 4.对 JIRA 进行配置 4.1.JIRA ...

  5. Docker的使用初探(二):Docker与.NET Core的结合

    目录 Docker的使用初探(二):Docker与.NET Core的结合 添加Dockefile 1. 在创建项目时添加 2. 手动添加 3. 容器业务流程协调控制程序支持 Dockefile语法 ...

  6. 使用jenkins来跑docker image的惨痛经历

    记录一下我使用jenkins来跑docker container的艰辛路程吧,是照着jenkins官网的[文档](https://jenkins.io/doc/tutorials/build-a-ja ...

  7. Docker & ASP.NET Core 教程

    第一篇:把代码连接到容器 第二篇:定制Docker镜像 第三篇:发布镜像 第四篇:容器间的连接 第五篇: Docker & ASP.NET Core (5):Docker Compose AS ...

  8. Docker 部署Dotnet Core MVC项目

    原文:Docker 部署Dotnet Core MVC项目 1.dotnet core创建项目 dotnet new mvc -o myweb cd myweb 然后就是业务代码的编辑,增删改查乱七八 ...

  9. 七缸发动机预热,docker swarm + .net core 高速飙车成功

    (图片来源:Microsoft Blog) 上周五上午在我们将 .net core 博客站点由 docker swarm 自动驾驶改为 docker-compose 手动驾驶后,依然发生了翻车,意料之 ...

随机推荐

  1. 记录-外挂recovery的制作(魅蓝note)

    安卓的开源使其具有很强的可定制性,对于用户来说很具有可玩性.玩机一般来说就是解锁BootLoader刷入第三方recovery,利用第三方recovery刷第三方ROM,刷supersu获取root权 ...

  2. 基于TCP的通信程序设计

    套接字(Socket)是一种跨主机进程之间的双向通信接口,每个打开的套接字都可以通过一个套接字描述符来描述,因此可以使用低级文件编程库操作套接字. TCP是一中面向连接的网络传输控制协议.它每发送一个 ...

  3. mongoDB之监控工具mongotop

    mongotop也是mongodb-win32-x86_64-2.2.1\bin下的一个内置工具,mongotop提供了一个方法,用来跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数 ...

  4. java 多线程2(转载)

    http://www.cnblogs.com/DreamSea/archive/2012/01/11/JavaThread.html Ø线程的概述(Introduction) 线程是一个程序的多个执行 ...

  5. lnmp下 nginx 配置虚拟主机

    <一.参考> 这里以配置2个站点(2个域名)为例,n 个站点可以相应增加调整,假设: IP地址: 202.55.1.100 域名1 example1.com 放在 /www/example ...

  6. 【BZOJ4956】lydsy七月月赛 I 乱搞

    [BZOJ4956]lydsy七月月赛 I 题面 题解:傻题,Floyd传递闭包即可~ #include <cstdio> #include <cstring> #includ ...

  7. Javascript的参数详解

    函数可以有参数也可以没有参数,如果定义了参数,在调用函数的时候没有传值,默认设置为undefined 在调用函数时如果传递参数超过了定义时参数,jS会忽略掉多余参数 jS中不能直接写默认值,可以通过a ...

  8. 数据结构之 图论---连通分量的个数(dfs搜索)

    数据结构实验:连通分量个数 Time Limit: 1000MS Memory limit: 65536K 题目描述  在无向图中,如果从顶点vi到顶点vj有路径,则称vi和vj连通.如果图中任意两个 ...

  9. c/c++通用内存泄漏检测框架GMFD(General Memory Fault Detection Framework)

    http://qa.baidu.com/blog/?p=171 1 背景: x86平台有完善的用户态检测内存工具比如valgrind等,可以监控程序运行中详细的内存信息,从而精确定位内存问题.然而随着 ...

  10. configure: error: APR not found. Please read the documentation

    本以为Apache的编译安装很简单,其实不然: 以前的环境下编译报错很少 ,但这次不行了 提示configure: error: APR not found. Please read the docu ...