花了一点时间将吃灰数月的树莓派装上了Docker,并在容器中部署了一个Asp.Net Core应用程序,通过花生壳映射树莓派中的程序,可以使用外网访问树莓派,玩起来很有意思(外网访问地址:http://aspnetcore.online/,访问不通可能树莓派断电了),过程中发现了一点问题,或许对于同样路线的朋友有所帮助,特此写出玩转过程。

  码云Demo地址:https://gitee.com/530521314/ControlEvent.git

一、树莓派安装操作系统

  1、进入官网下载操作系统:https://www.raspberrypi.org/downloads/,我使用了官方的Raspbian系统,并且选择了无界面的轻量版Raspbian Stretch Lite.

  

  2、下载格式化SD卡的工具:https://www.sdcard.org/downloads/formatter_4/eula_windows/

  3、下载将系统烧录到SD卡中的工具Win32 DiskImager:http://sourceforge.net/projects/win32diskimager/,选择系统磁盘路径地址,选择卡,然后执行Write即可,等待几分钟,便完成烧录工作

  

  4、做一些配置工作,方便启动树莓派后可以快速玩转

   4.1、启动SSH,在卡分区内创建一个名为ssh的文件夹即可

   4.2、设置无线连接,本次我没有使用外接显示器到树莓派中,使用Putty工具直接无线连接,个人感觉更为方便,在卡内boot文件夹内,创建一个wpa_supplicant.conf的文件,并写下如下内容,该内容在树莓派通电后会由系统自动添加到/etc/wpa_supplicant/wpa_supplicant.conf中,设置完毕后便可以插入到树莓派,开始通电了

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config= //WiFi没有密码
network={
ssid="你的无线网络名称(ssid)"
key_mgmt=NONE
} //WiFi使用WEP加密
network={
ssid="无线网络名称(ssid)"
key_mgmt=NONE
wep_key0="wifi密码"
} //WiFi使用WPA/WPA2加密
network={
ssid="无线网络名称(ssid)"
key_mgmt=WPA-PSK
psk="wifi密码"
} //以我的举例(priority连接优先级最高):
network={
ssid="Yang1802"
key_mgmt=WPA-PSK
psk="xxxxxxxx"
priority=
}

   4.3、使用Putty连接树莓派,树莓派ip地址可以找办法查看(如我使用的华为路由器,则可以登录路由器管理平台查看),使用账号pi,密码raspberry完成登录,开始校正树莓派时间

// 设置时区为 亚洲(Asia) 上海(Shanghai)
sudo dpkg-reconfigure tzdata
// 启动 NTP 使计算机时钟与 Internet 时间服务器同步
sudo timedatectl set-ntp true

  5、切换到root账号,方便操作

sudo su

二、树莓派安装Docker

  1、开始安装Docker,由于树莓派使用的是ARM板,因此在安装Docker时,需要使用ARM板的安装教程:https://docs.docker.com/install/linux/docker-ce/debian/#install-using-the-convenience-script,使用提供的安装脚本完成安装即可,需要等待一些时间。

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

  2、安装Git工具,安装Git的目的是用于下载码云上的代码到树莓派中,虽然这个环节是有点冗余的,当我配置好了一台Jenkins服务器后,完全可以使用Jenkins服务器的功能将需要的镜像生产完成,因此这个环节就显得不这么重要了,但是,如果没有Jenkins服务器,那么这个环节就不得不进行了,毕竟需要将代码转移到树莓派中,或是开发环境中开发完毕,使用ftp转移到树莓派中等多种方式实现,使用如下命令安装git工具。

sudo apt-get install git

三、使用Dockerfile编译镜像并生成容器

   1、新建应用程序,按照约定的标准化应用程序构建方式完成项目搭建(前几篇文章中讲到了),具体的项目结构可以从码云中查看。

  

  2、增加Dockerfile并修改默认的Dockerfile内容,由于树莓派使用的是Arm板子,因此对于.net core运行环境也有所不同,在Dockerfile中需要指定发布目标平台,具体Dockerfile如下,使用的基础镜像可以从dotnet组织提供的示例中找到:https://github.com/dotnet/dotnet-docker,我针对该示例中有的Dockerfile做了一些改动,以适应项目结构的需要。

FROM microsoft/dotnet:2.2-sdk-stretch-arm32v7 AS build
WORKDIR /app # copy csproj and restore as distinct layers
COPY ControlEvent.Web.csproj ./ControlEvent.Web/
WORKDIR /app/ControlEvent.Web
RUN dotnet restore # copy and build app and libraries
WORKDIR /app/
COPY . ./ControlEvent.Web/
WORKDIR /app/ControlEvent.Web
RUN dotnet publish -c Release -r linux-arm -o out FROM microsoft/dotnet:2.2-runtime-deps-stretch-slim-arm32v7 AS runtime
WORKDIR /app
COPY --from=build /app/ControlEvent.Web/out ./
ENTRYPOINT ["./ControlEvent.Web"]

  3、提交代码,在树莓派中使用Git克隆项目获取代码,并进入到Dockerfile层级使用命令构建镜像

  

  使用如下命令构建镜像,我的目标镜像名称为controlevent,此次构建要花费点时间,需要下载相关的基础镜像,下一次构建时会很快了

docker build --pull -t controlevent .

  4、使用如下命令生成容器,本次指定了-it参数,在生成完毕后可以查看控制台输出,直接按Ctrl Q和P退出即可,也可直接使用-d参数后台运行

docker run --rm -it -p : controlevent

  

  5、使用ip地址及端口访问,如果绑定了花生壳,并且在花生壳中做了本地映射,也可以直接使用域名加端口直接访问树莓派中的服务

 至此,本次树莓派中安装Docker并部署Asp.Net Core应用程序就完成了。

 本文地址:https://www.cnblogs.com/CKExp/p/10233780.html

 欢迎关注微信订阅号,有新的文章将同步到订阅号中

  

2019-1-7,望技术有成后能回来看见自己的脚步

Asp.Net Core&Docker部署到树莓派3B中的更多相关文章

  1. ASP.NET Core Docker部署

    前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序. ...

  2. 详解ASP.NET Core Docker部署

    前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序. ...

  3. Ubuntu-Docker[1]安装Docker,通过Docker部署net core代码,需要结合[.NET Core 18]发布、ASP.NET Core Docker部署

    1)通过系统自带包安装 通过自带包安装,可能Docker版本较旧 $ sudo apt-get update Reading package lists... Done $ sudo apt-get ...

  4. 实战Asp.Net Core:部署应用

    1.前言 某一刻,你已经把 .Net Core 的程序写好了.接下来,还可以做什么呢?那就是部署了. 作为一名开发工程师,如果不会部署自己开发的应用,那么这也是不完整的.接下来,我们就来说说,如何部署 ...

  5. Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署

    运行环境 照例,先亮环境:软件的话我这里假设你已经批准好了.net core 运行环境,未配置可以看我的这篇[linux(centos)搭建.net core 运行环境] 腾讯云 centos:7.2 ...

  6. ASP.NET Core Docker jexus nginx部署-CentOS实践版

    本文用图文的方式记录了我自己搭建centos+asp.net core + docker + jexus + nginx的整个过程,希望对有同样需求的朋友有一定的参考作用. 本文主要内容如下: cen ...

  7. Docker的asp.net core应用部署系列——docker pull 加速

    原文:Docker的asp.net core应用部署系列--docker pull 加速 版权声明:本文为博主原创文章,随意转载. https://blog.csdn.net/Michel4Liu/a ...

  8. NET Core Docker部署

    NET Core Docker部署 前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行 ...

  9. Asp.Net Core 程序部署到Linux(centos)生产环境(一):普通部署

    运行环境 照例,先亮底 centos:7.2 cpu:1核 2G内存 1M带宽 辅助工具:xshell xftp 搭建.net core运行环境 .net core 的运行环境我单独写了一篇,请看我的 ...

随机推荐

  1. 原生Feign使用详解

    一,简介 Feign使得 Java HTTP 客户端编写更方便.Feign 灵感来源于Retrofit.JAXRS-2.0和WebSocket.Feign最初是为了降低统一绑定Denominator到 ...

  2. Vue.js与Jquery的比较 谁与争锋 js风暴

    普遍认为jQuery是适合web初学者的起步工具.许多人甚至在学习jQuery之前,他们已经学习了一些轻量JavaScript知识.为什么?部分是因为jQuery的流行,但主要是源于经验开发人员的一个 ...

  3. UED团队规范设计参考及建议

    公司产品线逐渐增多,变动频繁且并行开发,常常需要设计与开发能够快速的做出响应.同时这类产品中有存在很多类似的页面以及组件,可以通过抽象得到一些稳定且高复用性的内容.通过模块化的解决方案,降低冗余的生产 ...

  4. 浅谈C++ STL中的优先队列(priority_queue)

    从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维的一致性导致的. 今天讲一讲优先队列(priority_queue),实际 ...

  5. QT中对内存的管理

    在QT中,一切继承自QT自有类的类,如果存在parent指针,那么当parent指针delete时,该类中的指针(它们都属于parent指针对应的child指针)也会被delete.综上,如果我们的窗 ...

  6. Python_marshal模块操作二进制文件

    import marshal #导入模块 x1=30 #待序列化的对象 x2=5.0 x3=[1,2,3] x4=(4,5,6) x5={'a':1,'b':2,'c':3} x6={7,8,9} x ...

  7. [ 搭建Redis本地服务器实践系列一 ] :图解CentOS7安装Redis

    上一章 [ 搭建Redis本地服务器实践系列 ] :序言 作为开场白介绍了下为什么要写这个系列,从这个章节我们就开始真正的进入正题,开始搭建我们本地的Redis服务器.那么关于Redis的基本概念,什 ...

  8. Windows安装TensorFlow

    1.下载安装Anaconda 官方地址:https://www.continuum.io/downloads/镜像地址:https://mirrors.tuna.tsinghua.edu.cn/ana ...

  9. Exchanger兄弟线程间数据信息交换

    一.简述 Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据.当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用 ...

  10. SHELL脚本--expr命令全解

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html expr命令可以实现数值运算.数值或字符串比较.字符串匹配.字 ...