网站接入服务单位名称,深圳软件与信息服务,如何制作网站赚钱,电商小程序商城模板在上一篇文章 .NET与鲲鹏共展翅#xff0c;昇腾九万里#xff08;一#xff09;中#xff0c;我们通过在鲲鹏架构的Euler系统上跑Docker的方式把dotnet core 跑起来了#xff0c;有读者反馈说“还是走docker喽#xff0c;你这个标题应该改成鲲鹏和docker两条鲸鱼的故事”… 在上一篇文章 .NET与鲲鹏共展翅昇腾九万里一中我们通过在鲲鹏架构的Euler系统上跑Docker的方式把dotnet core 跑起来了有读者反馈说“还是走docker喽你这个标题应该改成鲲鹏和docker两条鲸鱼的故事”。这里要说明一下dotnet core 在鲲鹏上的Euler系统里原生就能跑起来使用docker只是为了简化应用环境配置以及隔离各种应用对操作系统的配置污染比如修改环境变量设定执行路径变更各种配置从而导致新的应用配置好后原有应用可能挂掉的问题。在这里我也简单的介绍一下在Euler系统下直接安装dotnet core SDK的方法。1. 安装几个必备库yum install zlib -y
yum install libcurl -y2. 下载 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.gz3. 解压并安装 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.12. 新建一个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 --frombuild /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 Dockerfile3. 看下生成的镜像docker images4. 运行这个镜像docker run --rm -it -p 80:80 mvctest程序成功运行输出如下浏览器打开地址展示如下正式使用可以去掉--rm -it两个参数改成-d --restartunless-stopped这样程序将在后台运行不会出现交互界面当异常退出后docker也能自动将其重新运行起来docker run -d --restartunless-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掉坑里了。