在前面的两篇文章中,介绍了如何在华为鲲鹏架构及其Euler系统上运行dotnet core, 使用docker运行了默认的mvc模板项目,这篇文章继续介绍在docker中运行更复杂的dotnet core项目,这里以业内鼎鼎大名的abp vnext框架,版本 2.6 为例。

我们还是假设宿主机不涉及任何 dotnet 环境,所有的dotnet操作全部由docker镜像来处理。

1.  生成几个dotnet core的扩展镜像

a.  sdk31镜像 Dockerfile.sdk31

在官方的 sdk:3.1镜像上设置中国时区,添加部分linux实用小工具,添加dotnet-ef, volo.abp.cli, nodejs, npm, yarn, gulp等生成编译abp框架所需工具

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
MAINTAINER Coolincy coolincy@qq.com# 设定UTF-8及中文时区,并将 apt 包源改为阿里云镜像
ENV LANG C.UTF-8
ENV TZ Asia/Shanghai
ENV PATH $PATH:/root/.dotnet/toolsRUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' > /etc/timezone \
&& sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list \
&& sed -i s@/security.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list \
&& apt clean# 更新软件包,并添加部分小工具
RUN apt update && apt upgrade -y && apt autoremove -y \
&& apt install apt-utils nano wget dnsutils inetutils-ping net-tools iproute2 expect apt-transport-https -y \
&& dotnet tool install -g dotnet-ef \
&& dotnet tool install -g volo.abp.cli# 安装 nodejs 12.x
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - \
&& apt install nodejs -y# 将 npm 包源改为阿里云镜像,安装 yarn 及 gulp
RUN npm config set registry https://registry.npm.taobao.org \
&& echo sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ >> /root/.npmrc \
&& echo phantomjs_cdnurl=http://npm.taobao.org/mirrors/phantomjs >> /root/.npmrc \
&& echo electron_mirror=https://npm.taobao.org/mirrors/electron/ >> /root/.npmrc \
&& npm update -g && npm -g install yarn && npm -g install gulp-cli && npm info gulp-cli#docker build --pull -t sdk31 . -f Dockerfile.sdk31

执行 docker build --pull -t sdk31 . -f Dockerfile.sdk31 生成镜像

b.  asp31镜像 Dockerfile.asp31

在官方的 aspnet:3.1镜像上设置中国时区,添加部分linux实用小工具

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
MAINTAINER Coolincy coolincy@qq.com# 设定UTF-8及中文时区,并将 apt 包源改为阿里云镜像
ENV LANG C.UTF-8
ENV TZ Asia/ShanghaiRUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' > /etc/timezone \
&& sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list \
&& sed -i s@/security.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list \
&& apt clean# 更新软件包,并添加部分小工具
RUN apt update && apt upgrade -y && apt autoremove -y \
&& apt install apt-utils dmidecode nano wget dnsutils inetutils-ping net-tools iproute2 -y#docker build --pull -t asp31 . -f Dockerfile.asp31

执行 docker build --pull -t asp31 . -f Dockerfile.asp31 生成镜像

c.  aspgdi31镜像 Dockerfile.aspgdi31

在asp31镜像上添加gdiplus库,使 dotnet core 支持gdi图形操作

FROM asp31
MAINTAINER Coolincy coolincy@qq.com# 添加 gdi
RUN apt install libfontconfig1 libgdiplus -y
RUN ln -s libgdiplus.so gdiplus.dll
RUN ln -s /lib/x86_64-linux-gnu/libdl-2.24.so /lib/x86_64-linux-gnu/libdl.so# arm64 架构将上面一句改成下面两句
#RUN ln -s /lib/aarch64-linux-gnu/ld-2.28.so /lib/aarch64-linux-gnu/ld.so
#RUN ln -s /lib/aarch64-linux-gnu/ld-2.28.so /lib/aarch64-linux-gnu/libdl.so#docker build -t aspgdi31 . -f Dockerfile.aspgdi31

执行 docker build -t aspgdi31 . -f Dockerfile.aspgdi31 生成镜像

2.  使用sdk31镜像新建一个默认配置的abp项目

使用docker运行sdk31镜像,同时映射几个目录

~/dotnet : 用于存放生成的项目文件

~/.abp : abp命令行工具缓存

~/.local/share/NuGet/v3-cache : NuGet源缓存

~/.nuget/packages : NuGet包缓存

映射缓存目录是为了以后使用更快

docker run --rm -it \
-v ~/dotnet:/root/dotnet \
-v ~/.abp:/root/.abp \
-v ~/.local/share/NuGet/v3-cache:/root/.local/share/NuGet/v3-cache \
-v ~/.nuget/packages:/root/.nuget/packages \
sdk31 bash

进入容器后执行如下命令创建项目

# 如果nuget缓存有问题,可以使用一下命令清理缓存
dotnet nuget locals all -c# 切换到工作目录
cd /root/dotnet# 使用 abp 命令行生成一个解决方案
abp new AOA.AbpOnDocker# 退出容器
exit

退出容器后,修改项目里的连接串配置

cd ~/dotnet/
nano AOA.AbpOnDocker/aspnet-core/src/AOA.AbpOnDocker.DbMigrator/appsettings.json

修改连接串(具体根据自己实际情况修改,如果SQLServer登录账号没有建库权限,那么必须先在SQLServer上创建指定数据库)为:

Server=localhost; Database=AbpOnDocker; User ID=AbpOnDocker; Password=1q2w3e*; Trusted_Connection=False;

同样修改Web项目里的连接串,同上一步,这里不再列出。

nano ~/dotnet/AOA.AbpOnDocker/aspnet-core/src/AOA.AbpOnDocker.Web/appsettings.json

3.  使用sdk31镜像以及asp31镜像生成AbpOnDocker程序镜像

cd ~/dotnet/AOA.AbpOnDocker/aspnet-core

新建Dockerfile,内容如下

FROM asp31 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443FROM sdk31 AS publish# copy proj and restore as distinct layers
WORKDIR /src
COPY . .
RUN dotnet restore "src/AOA.AbpOnDocker.Web/AOA.AbpOnDocker.Web.csproj" \
&& dotnet restore "src/AOA.AbpOnDocker.DbMigrator/AOA.AbpOnDocker.DbMigrator.csproj"# db migrator
WORKDIR "/src/src/AOA.AbpOnDocker.DbMigrator"
RUN dotnet run -c Release# publish
WORKDIR "/src/src/AOA.AbpOnDocker.Web"
RUN yarn && gulp \
&& dotnet publish "AOA.AbpOnDocker.Web.csproj" -c Release -o /app/publish# build docker image
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "AOA.AbpOnDocker.Web.dll"]

编译 docker 镜像

docker build -t abpondocker . -f Dockerfile

输出如下

数据库表及初始化数据生成

还原js包

发布web项目并生成镜像

执行 docker images 看到镜像已经生成成功了,同时会看到一个 none的镜像

这个镜像是docker编译过程中生成的中间镜像,可以执行

docker system prune

命令清除这个无用的镜像。

运行 docker 镜像

docker run --rm -it -p 44324:443 -p 8024:80 abpondocker

现在打开浏览器访问一下8024端口,abp vnext框架已经跑起来了。

总结,把官方sdk镜像作为基础镜像,我们可以随意添加所需的工具,生成满足自己使用要求的镜像,比如abp框架,需要abp cli, nodejs, npm, yarn, gulp 等工具,我们新构建含有这些工具的sdk镜像,通过docker就可以轻轻松松的做到不在宿主机建立dotnet core 环境,而进行dotnet编译构建运行等操作。本文以abp为例,不同的项目所需工具不尽相同,读者同学们可以根据实际需要构建自己的镜像。为了方便学习,本文相关文件可以在 https://github.com/coolincy/dotnetStart 中找到。

欢迎关注公众号 "dotnet 新征程"

使用 docker 编译运行 abp 项目相关推荐

  1. VS code 如何编译运行web项目教程

    一.使用vs code开发运行web 项目 由于 Visual Studio 体积大,对于性能不好的电脑的来说,简直是种不友好的开发体验.所以vs code 轻量级开发工具的出现,简直是不要太好了. ...

  2. Docker环境运行Vue项目

    1. 打包VUE工程 在vue工程根目录下,执行打包命令 npm run build 随后将生成 dist文件夹,里面的内容就是打包后的文件 2. 创建Nginx配置文件 在vue工程根目录下,创建文 ...

  3. Docker环境运行SpringBoot项目

    1. 打包Jar 将Spring Boot工程打包成Jar,在工程根目录下执行命令 mvn package 随后,在target目录下生成一份 my-server.jar 2. 创建Dockerfil ...

  4. eclipse中编译运行maven项目使用jetty

    1.在plugins中添加jetty节点 <plugin><groupId>org.mortbay.jetty</groupId><artifactId> ...

  5. maven引入依赖包,import依赖包,编译运行maven项目

    文章目录 IDEA中新建一个maven项目 在pom.xml中添加依赖包,确定依赖包成功导入,在项目中import依赖包 怎么确定maven成功的导入了依赖包 在项目中import导入的依赖包 总结 ...

  6. M1编译运行x86项目

    1.xcode设置 改为rosetta,然后build-run 2.有些库可以单独在x86电脑上跑,也可以单独在arm64(M1)上跑,但是不能在arm64电脑上跑x86,用rosetta也不行. 3 ...

  7. linux eclipse-JAVA_从 Linux 终端编译运行 Eclipse Java 项目

    假如你在linux系统下使用Eclipse开发一个Java项目,你可能会有从其他地方远程连接这个项目的需求.或许 你可以使用teamviewer远程连接linux桌面,但那经常会非常龟速.你也可以从常 ...

  8. linux上运行项目,发布项目到 Linux 上运行 Core 项目

    目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win7)上用虚拟机建了个 CentOS7 ,来演示下,我们windows上的项目如何发布项目到Linux上运行 ...

  9. docker保护python源码_Tensorflow在Docker中运行和源码编译

    本文分享在在Docker中运行Tensorflow和进行源码编译的方法和步骤,包括:编译.构建docker镜像.创建和运行Docker容器.部署完的容器可以通过Jupyter Notebook进行访问 ...

最新文章

  1. 我的第一个 JSP (SSH) 个人网站【开源】
  2. 帧中继和路由协议详解-在帧中继多点子接口上运行EIGRP
  3. Android——RatingBar(评价条)相关知识总结贴
  4. python从入门到实践django看不懂_Python编程:从入门到实践踩坑记 Django
  5. C++实现基数排序(附完整源码)
  6. 新手如何快速上手Linux,韦东山告诉你。
  7. vs2008中combox用法总结
  8. [Java基础]增强for循环
  9. 2021年网生代线上社交行为洞察报告
  10. java环境变量_Java的下载及环境变量的配置
  11. html的模板引入,rel=import 未来的HTML模板引入方式
  12. java 泛型参数_[基础]-Java泛型
  13. java json解码器_Jackson:我是最牛掰的 Java JSON 解析器(有点虚)
  14. jenkins教程菜鸟_jenkins新手入门教程
  15. JSEclipse安装后无法打开js文件_火狐浏览器打开邮箱添加不了附件
  16. 脑电的频谱分析和时频分析-EEG Processing and Feature 5
  17. 创新科技 新BMW 7系 有你夫复何求
  18. 数据中心空调系统基础知识-制冷量与热量计算
  19. 阿里云物联网平台-数据解析脚本详解
  20. ASUS AC1900p 梅林固件编译 asuswrt-merlin

热门文章

  1. Xcode6.1 模拟器路径
  2. 男人会为女人改变多少
  3. [Tyvj1114 搭建双塔]
  4. Commons里的DButil
  5. 更新!在线状态和用户的共存模式保持一致
  6. 微信小程序 fire_如何在Fire TV和Fire TV Stick上侧面加载应用程序
  7. 如何从特定位置开始分享YouTube视频
  8. ad中电源插座怎么封装_您可以在房屋中安装的各种电源插座
  9. WiFi行业将走向何方?
  10. 什么是事件冒泡?如何用jquery/js阻止事件冒泡?阻止冒泡有什么作用?小生来抛个砖。...