在上一篇文章 .NET与鲲鹏共展翅,昇腾九万里(一)中,我们通过在鲲鹏架构的Euler系统上跑Docker的方式把dotnet core 跑起来了,有读者反馈说“还是走docker喽,你这个标题应该改成鲲鹏和docker两条鲸鱼的故事”。这里要说明一下,dotnet core 在鲲鹏上的Euler系统里原生就能跑起来,使用docker只是为了简化应用环境配置以及隔离各种应用对操作系统的配置污染(比如修改环境变量,设定执行路径,变更各种配置)从而导致新的应用配置好后,原有应用可能挂掉的问题。

在这里,我也简单的介绍一下在Euler系统下直接安装dotnet core SDK的方法。

1. 安装几个必备库

yum install zlib -y
yum install libcurl -y

2. 下载 dotnet core sdk arm64 的包,这里以 3.1.201版本为例,其他版本地址可以去 dotnet core 官网获取

wget https://download.visualstudio.microsoft.com/download/pr/98a2e556-bedd-46c8-b3fa-96a9f1eb9556/09f60d50e3cbba0aa16d48ceec9dcb0b/dotnet-sdk-3.1.201-linux-arm64.tar.gz

3. 解压并安装 dotnet-sdk-3.1.201-linux-arm64.tar.gz,这里假定将sdk安装到 /usr/share/dotnet/

mkdir -p /usr/share/dotnet/
tar zxf dotnet-sdk-3.1.201-linux-arm64.tar.gz -C /usr/share/dotnet/
export DOTNET_ROOT=/usr/share/dotnet/
export PATH=$PATH:/usr/share/dotnet/

好了,到这里dotnet core sdk就安装完成了,你可以输入dotnet –info验证一下。

另外可以将最后两个2个export添加到 /etc/profile,这样每次登录都可以直接使用 dotnet 命令了。


现在接着上一篇文章的内容,我们看看如何使用.NET SDK 的 Docker镜像编译 .NET Core程序,并使用Docker将它跑起来。

一、使用Docker 镜像创建dotnet core 项目

1. 拉取dotnet core sdk 3.1的镜像

docker pull mcr.microsoft.com/dotnet/core/sdk:3.1

2. 新建一个dotnet core 项目

先在本地建一个目录

mkdir -p ~/dotnet/mvctest

现在执行如下命令,新建一个sdk镜像的容器,并进入交互界面,这里使用了 -v ~/dotnet/mvctest:/root/dotnet/mvctest 参数将外部的文件夹映射到容器内

docker run --rm -it \
-v ~/dotnet/mvctest:/root/dotnet/mvctest \
mcr.microsoft.com/dotnet/core/sdk:3.1 \
bash

进入容器后执行

dotnet new mvc -n mvctest -o ~/dotnet/mvctest

这一步跟平时我们使用dotnet命令行没什么区别,这里就是利用 sdk镜像创建一个dotnet core 项目

输入exit退出容器,由于刚才使用 --rm 参数运行sdk镜像,退出后容器自动销毁。

看一下本机的~/dotnet/mvctest是否已经有内容了

二、使用sdk镜像来编译这个新建的项目,并生成镜像

1. 在mvctest目录下新建一个Dockerfile,内容如下

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /source# copy proj and restore as distinct layers
COPY . .
RUN dotnet restore
RUN dotnet publish -c release -o /app --no-restore# create app image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "mvctest.dll"]

里面引用了2个镜像:

mcr.microsoft.com/dotnet/core/sdk:3.1 用于编译

mcr.microsoft.com/dotnet/core/aspnet:3.1 用于mvctest的基础镜像

2. 编译dotnet项目并生成mvctest镜像,如果本地已有最新的sdk及aspnet镜像,以下参数中的 --pull 可以省略加快编译速度

docker build --pull -t mvctest . -f Dockerfile

3. 看下生成的镜像

docker images

4. 运行这个镜像

docker run --rm -it -p 80:80 mvctest

程序成功运行,输出如下

浏览器打开地址展示如下

正式使用可以去掉--rm -it两个参数,改成-d --restart=unless-stopped,这样程序将在后台运行,不会出现交互界面,当异常退出后,docker也能自动将其重新运行起来

docker run -d --restart=unless-stopped -p 80:80 mvctest

至此,dotnet core与鲲鹏架构及Euler系统相关的部分内容已经结束,所有在其他平台上正常运行的程序,基本上不需要修改即可在鲲鹏架构下的Euler系统上运行。这里提一点,由于鲲鹏是arm64架构的,有些dotnet包底层引用了c++编写的dll,比如System.Data.SQLite, 并且该nuget包里没有包含arm64的dll,如果你的使用了这样的包,在鲲鹏架构下将会报告找不到dll的错误,解决方法有2种,一种是自己去找到arm64使用的dll, 拷贝到项目中,另外一种就是换成其他支持arm64的包,比如System.Data.SQLite有个替代的由微软出品的 Microsoft.Data.Sqlite。当然了这种情况比较少,目前我所涉及的项目只有Sqlite掉坑里了。

.NET与鲲鹏共展翅,昇腾九万里(二)相关推荐

  1. .NET与鲲鹏共展翅,昇腾九万里(一)

    2019年1月7日,华为推出鲲鹏920处理器,便宣告了构建鲲鹏生态系统的开始.据官方介绍,鲲鹏是一个包含了鲲鹏计算单元.AI处理单元.智能管理.智能网卡的片上系统SoC,在此之上加上服务器操作系统,从 ...

  2. 鲲鹏性能优化十板斧(二)——CPU与内存子系统性能调优

    1.1 CPU与内存子系统性能调优简介 调优思路 性能优化的思路如下: l   如果CPU的利用率不高,说明资源没有充分利用,可以通过工具(如strace)查看应用程序阻塞在哪里,一般为磁盘,网络或应 ...

  3. 共读ulord项目分析(二)

    本文发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明--一界码农+产品汪+U赞签约作者 个人微信号(liuhua7851) 接着共 ...

  4. 鲲鹏云HCIA知识总结(二)

    前言:       目前为止,理论的知识已经结束了,接下来两天是一些实验课.

  5. 华为昇腾AI全栈知识深入解读,师资培训沙龙深圳场圆满落幕!

    头图 | 视觉中国 极度缺乏AI人才,已成为中国人工智能产业发展道路上的瓶颈.在国家政策的支持下,众高校初建AI专业者甚多,但高校教师应掌握哪些知识储备来传道授业,大家都是"摸着石头过河&q ...

  6. 2019华为全联接大会(汇总)

    来源:龙为科技 2019年9月18-20日,华为公司在上海举办第四届华为全联接大会(HUAWEI CONNECT),发布云和AI的最新产品与解决方案,分享如何应用云和AI的技术,推进数字化转型的最新实 ...

  7. [ASP.NET Core MVC] 如何实现运行时动态定义Controller类型?

    昨天有个朋友在微信上问我一个问题:他希望通过动态脚本的形式实现对ASP.NET Core MVC应用的扩展,比如在程序运行过程中上传一段C#脚本将其中定义的Controller类型注册到应用中,问我是 ...

  8. 【HC资料合集】2019华为全联接大会主题资料一站式汇总,免费下载!

    HUAWEI CONNECT 2019 大会主题演讲.峰会演讲精彩资料速递,欢迎下载查阅. 主题 资料下载(登录后可下载附件) 演讲者 [主题演讲资料]2019华为全联接大会day   2 共筑高品质 ...

  9. 华为全面启航计算战略:“鲲鹏+昇腾”双引擎

    HUAWEI CONNECT 2019第二天,华为基于"鲲鹏+昇腾"双引擎正式全面启航计算战略,宣布开源服务器操作系统.GaussDB OLTP单机版数据库,开放鲲鹏主板,拥抱多样 ...

最新文章

  1. 买电脑怎么看配置_电脑配置怎么选?
  2. 做一个略调皮的个人主页--相册与随笔篇
  3. 为了探究不同光照处理_浅谈中考物理实验探究易错题
  4. muduo:高效整型转换为字符串
  5. BP神经网络 语音信号分类
  6. Span元素的 width属性 无效果原因及解决方案
  7. leetcode 521. 最长特殊序列 Ⅰ(Java)
  8. 每个[NET]开发人员现在应该下载的十种必备工具
  9. php 数据类型 map,ResultMap和ResultType的区别
  10. 力扣-5773(243周赛)插入后的最大值
  11. 音视频基础概念与流程
  12. Linux中安装VIM命令
  13. 第四章计划:制定项目使命、愿景、目的和目标
  14. 关于AI,值得推荐的五本好书
  15. 孙悟空这个农村人(搞笑)
  16. 机器学习实战python版决策树以及Matplotlib注解绘制决策树
  17. 微信支付:小微商户申请入驻第三步:平台证书序列号解密和敏感词加密
  18. 数据结构之数据、数据元素、数据项、数据对象之间的关系
  19. 以流量为王的时代,如何获得不错的流量,泰山众筹如何脱颖而出?
  20. 五行Python代码实现春节微信祝福神器(基于itchat)

热门文章

  1. Android---AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
  2. 最佳新秀Java(22)——再次了解泛型
  3. Android之EditText自定义边框和边框颜色(转载)
  4. 4月12日 webform基本控件
  5. SQL利用Case When Then多条件判断
  6. 【leetcode】521. Longest Uncommon Subsequence I
  7. BZOJ4596:[SHOI2016]黑暗前的幻想乡——题解
  8. bondat蠕虫传播与对抗
  9. 海尔联手软银机器人,进军服务机器人领域
  10. 类QQ右下角弹出框(Qt)