树莓派也跑Docker和.NET Core

树莓派就是一个卡片大小的迷你电脑。
640?wx_fmt=png640?wx_fmt=png

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

系统下载

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,插上读卡器。
640?wx_fmt=png
完成后在sd卡根目录添加两个文件ssh wpa_supplicant.conf
640?wx_fmt=jpeg
wpa_supplicant.conf的内容
640?wx_fmt=png

把SD插入树莓派,然后插上电源线。
640?wx_fmt=png
插上电源它就会自动开机启动了。使用Advanced IP Scanner扫描树莓派的ip(如果过了两分钟还是没有扫描到,可以尝试重新往SD添加wpa_supplicant.conf文件)
640?wx_fmt=png
然后使用xshell连接。从现在开始,后面的操作你会感觉和普通linux没太大区别。
640?wx_fmt=png
更换国内源(为了提高下载速度)

sudo nano /etc/apt/sources.list

deb http:
deb-src http:

sudo nano /etc/apt/sources.list.d/raspi.list

deb http:
deb-src http:

sudo apt-get update

安装自己想要的软件

sudo apt-get install vim      
sudo apt-get install lrzsz
sudo apt-get install git

如果上面的方式失败。你可以再准备一个网线,分别插入树莓派和笔记本。
然后打开“网络和共享中心”,会多了一个本来连接。点击上面的正常网络。
640?wx_fmt=png
然后WIN + R,cmd进入命令行,输入 arp -a查看网络ip。
640?wx_fmt=png
一般情况第一个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
sudo ufw allow 80
sudo ufw delete allow 80
curl -sSL https://get.docker.com | sudo sh

sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker pi

实际上树莓派和我们平时使用的PC或云主机还是有区别的,树莓派是ARM架构。而我们平时用的PC、云主机一般都是x86架构。
也就是说我们在PC机上能跑的程序放树莓派上很可能跑不起来,除非你做了ARM平台的发布。如:dotnet publish -r debian-arm -c Release

所有运行平台
https:
https:

.netcore的docker镜像地址
https:
https:

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


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

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

最后给大家推荐一个开源项目quartzui:https://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

  • http://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/

原文地址:https://www.cnblogs.com/zhaopei/p/raspberrypi-docker-netcore.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源]OSharpNS 步步为营系列 - 1. 业务模块设计

OSharpNS全称OSharp Framework with .NetStandard2.0,是一个基于.NetStandard2.0开发的一个.NetCore快速开发框架。这个框架使用最新稳定版的.NetCore SDK(当前是.NET Core 2.2),对 AspNetCore 的配置、依赖注入、日志、缓存、实体…

CF1479A Searching Local Minimum

CF1479A Searching Local Minimum 题意&#xff1a; 题解&#xff1a; 先说结论&#xff1a; 若l&#xff0c;r满足&#xff1a; al−1>al,ar<ar1a_{l-1}>a_{l},a_{r}<a_{r1}al−1​>al​,ar​<ar1​al,al1,....,ara_{l},a_{l1},....,a_{r}al​,al1​,....…

C#8.0的两个有趣的新特性以及gRPC

最近每天忙着跑很多地方&#xff0c;回家就不想动了&#xff0c;没什么心情写东西。今天有空&#xff0c;稍微写一点。下文中&#xff1a;关于C#语法特性的部分需要Visual Studio 2019支持。关于.NET Core的部分需要安装.NET 3.0 Preview4&#xff0c;低版本或许也可以但我没实…

CF1479C Continuous City

CF1479C Continuous City 题意&#xff1a; 给定 L, R. 构造一个有向带权图, 其中点数不大于 32, 且所有边都是从较小的点指向较大的点. 假设这个有向图有 n 个点, 你需要保证从 1到n 的所有路径的权值都在 [L, R]内且不存在 x∈[L,R], 使得不存在或存在多于一条从 1 到 n 的…

Office转PDF,Aspose太贵,怎么办?

在程序开发中经常需要将Office文件转换成PDF&#xff0c;著名的Aspose的三大组件可以很容易完成这个功能&#xff0c;但是Aspose的每个组件都单独收费&#xff0c;而且每个都卖的不便宜。在老大的提示下&#xff0c;换了一种思路来解决这个问题。环境dotNetCore:2.1CentOS:7.5D…

收起.NET程序的dll来

作为上床后需要下床检查好几次门关了没有的资深强迫症患者&#xff0c;有一个及其搞我的问题&#xff0c;就是dll问题。曾几何时&#xff0c;在没有nuget的年代&#xff0c;当有依赖项需要引用的时候&#xff0c;只能通过文件引用来管理引用问题&#xff0c;版本问题&#xff0…

从壹开始 [ Ids4实战 ] 之三║ 详解授权持久化 用户数据迁移

哈喽大家周三好&#xff0c;今天终于又重新开启 IdentityServer4 的落地教程了&#xff0c;不多说&#xff0c;既然开始了&#xff0c;就要努力做好?。书接上文&#xff0c;在很久之前的上篇文章《二║ 基础知识集合 & 项目搭建一》中&#xff0c;我们简单的说了说 Identi…

微软XAML Studio - WPF, UWP, Xamarin等技术开发者的福音

最近在继续倒腾WPF的项目&#xff0c;继续使用Caliburn.Micro和Xceed来堆代码。每次调试xaml上的binding&#xff0c;都有种要疯的赶脚。今天路过 https://channel9.msdn.com/ 浏览 WPF相关的学习视频时&#xff0c;遇到微软推荐的相关视频 - XAML sutdio简介https://channel9.…

AddMvc 和 AddMvcCore 的区别

目录本文出自《从零开始学 ASP.NET CORE MVC》目录 视频课程效果更佳&#xff1a;从零开始学 Asp.Net Core MVC ASP.NET Core 为什么有 AddMvc 和 AddMvcCore 他们是什么关系&#xff1f;在本视频中&#xff0c;我们将讨论 AddMvc()和 AddMvcCore()方法之间的区别。要在 ASP.NE…

浅谈容量规划

俗话说&#xff0c;”人无远虑&#xff0c;必有近忧”&#xff0c;容量规划就是”远虑”。所谓容量规划&#xff0c;是一个产品满足用户目标需求而决定生产能力的过程。当产品发展到一个较为稳定成熟的阶段&#xff0c;产品的整体处理能力的把控自然是不可或缺&#xff0c;尽管…

CF1063C Dwarves, Hats and Extrasensory Abilities

CF1063C Dwarves, Hats and Extrasensory Abilities 题意&#xff1a; 首先题目会给出 n &#xff0c;表示要输入多少点。 然后你输出n 个点的坐标&#xff0c;每输出一个点会告诉你这个点的颜色是黑色或者白色。 最后你需要输出两个点的坐标代表一条直线&#xff0c;这条直线…

Blazor——Asp.net core的新前端框架

Blazor是微软在Asp.net core 3.0中推出的一个前端MVVM模型&#xff0c;它可以利用Razor页面引擎和C#作为脚本语言来构建WEB页面&#xff0c;如下代码简单演示了它的基本功能&#xff1a;和Angular JS和VUE的模型非常类似&#xff0c;Blazor 支持大多数应用所需的核心方案&#…

CF1149B Three Religions

CF1149B Three Religions 题意&#xff1a; 给定长度为 n 的母串和三个子串s1,s2,s3s_1,s_2,s_3s1​,s2​,s3​ 。初始时子串均为空。有 q 次询问。你需要支持两种操作&#xff1a;向某个子串末尾添加一个字母&#xff0c;或者删去某个子串末尾的字母。在每次操作后&#xff…

【译文】领域模型的五个特征

我在这篇博客文章中&#xff0c;我试图给领域模型下一个非常合适的定义&#xff0c;我发现我的这些定义都不太妥当&#xff0c;不过&#xff0c;我们还是可以先来看一下wiki百科对领域驱动模型下的定义&#xff1a;问题解决和软件工程中的领域模型可以被认为是感兴趣的领域&…

使用ASP.NET Core 实现Docker的HealthCheck指令

写在前面HealthCheck 不仅是对应用程序内运行情况、数据流通情况进行检查&#xff0c; 还包括应用程序对外部服务或依赖资源的健康检查。健康检查通常是以暴露应用程序的HTTP端点的形式 实施&#xff0c;可用于配置健康探测的的场景有 &#xff1a;容器或负载均衡器 探测应用状…

VS Code 中有哪些好用的 Azure 插件?

在之前的文章中&#xff0c;我们提到了 Amazon、Google、IBM、Red Hat、Salesforce、Pivotal 等大厂都在 VS Code 中有提供相应的开发工具&#xff1a;亚马逊上了 VS Code 的船&#xff0c;还有哪些大厂也上了船&#xff1f;微软必定更是把 VS Code 作为其最重要的开发者平台了…

邀请 | 关于微软容器服务,你需要知道的二三事

容器是近年来特别火的话题&#xff0c;那么&#xff0c;什么是容器&#xff1f;为什么我们需要容器服务&#xff1f;微软容器服务特点是什么&#xff1f;今天我们用一种特殊的方式为大家介绍这三大话题。什么是容器这个部分&#xff0c;我们用一个故事进行开场。很久以前&#…

UWP 推荐 | 限时免费的RSS阅读器《RSS 追踪》登录 Windows 10

前不久&#xff0c;本公号作者 Bravo Yeung 写了一篇不错的关于 RSS 的文章 .Net开发者必知的技术类RSS订阅指南。RSS 现在用的人很少了&#xff0c;而且就算是我&#xff0c;也不过是在一周前才开始正视 RSS 。只因为接触到了一个很好很强大的社区 RSS Hub &#xff0c;当时看…

常见跨域解决方案以及Ocelot 跨域配置

常见跨域解决方案以及Ocelot 跨域配置Intro我们在使用前后端分离的模式进行开发的时候&#xff0c;如果前端项目和api项目不是一个域名下往往会有跨域问题。今天来介绍一下我们在Ocelot网关配置的跨域。什么是跨域跨域:浏览器对于javascript的同源策略的限制,例如a.cn下面的js不…

解读大内老A的《.NET Core框架本质》

老A说的一句话让我很受启发&#xff0c;想要深入了解框架&#xff0c;你要把精力聚焦在架构设计的层面来思考问题。而透彻了解底层原理&#xff0c;最好的笨办法就是根据原理对框架核心进行重建或者说再造。看起来没有捷径&#xff0c;也是最快的捷径。相信很多读者已经看过老A…