当前位置:   article > 正文

使用 docker 编译运行 abp 项目_docker build --pull

docker build --pull

这篇文章介绍在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框架所需工具

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

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

 

b.  asp31镜像 Dockerfile.asp31

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

 

  1. FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
  2. MAINTAINER Coolincy coolincy@qq.com
  3. # 设定UTF-8及中文时区,并将 apt 包源改为阿里云镜像
  4. ENV LANG C.UTF-8
  5. ENV TZ Asia/Shanghai
  6. RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
  7. && echo 'Asia/Shanghai' > /etc/timezone \
  8. && sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list \
  9. && sed -i s@/security.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list \
  10. && apt clean
  11. # 更新软件包,并添加部分小工具
  12. RUN apt update && apt upgrade -y && apt autoremove -y \
  13. && apt install apt-utils dmidecode nano wget dnsutils inetutils-ping net-tools iproute2 -y
  14. #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图形操作

  1. FROM asp31
  2. MAINTAINER Coolincy coolincy@qq.com
  3. # 添加 gdi
  4. RUN apt install libfontconfig1 libgdiplus -y
  5. RUN ln -s libgdiplus.so gdiplus.dll
  6. RUN ln -s /lib/x86_64-linux-gnu/libdl-2.24.so /lib/x86_64-linux-gnu/libdl.so
  7. # arm64 架构将上面一句改成下面两句
  8. #RUN ln -s /lib/aarch64-linux-gnu/ld-2.28.so /lib/aarch64-linux-gnu/ld.so
  9. #RUN ln -s /lib/aarch64-linux-gnu/ld-2.28.so /lib/aarch64-linux-gnu/libdl.so
  10. #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包缓存

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

  1. docker run --rm -it \
  2. -v ~/dotnet:/root/dotnet \
  3. -v ~/.abp:/root/.abp \
  4. -v ~/.local/share/NuGet/v3-cache:/root/.local/share/NuGet/v3-cache \
  5. -v ~/.nuget/packages:/root/.nuget/packages \
  6. sdk31 bash

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

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

 

 

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

  1. cd ~/dotnet/
  2. 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,内容如下

 

  1. FROM asp31 AS base
  2. WORKDIR /app
  3. EXPOSE 80
  4. EXPOSE 443
  5. FROM sdk31 AS publish
  6. # copy proj and restore as distinct layers
  7. WORKDIR /src
  8. COPY . .
  9. RUN dotnet restore "src/AOA.AbpOnDocker.Web/AOA.AbpOnDocker.Web.csproj" \
  10. && dotnet restore "src/AOA.AbpOnDocker.DbMigrator/AOA.AbpOnDocker.DbMigrator.csproj"
  11. # db migrator
  12. WORKDIR "/src/src/AOA.AbpOnDocker.DbMigrator"
  13. RUN dotnet run -c Release
  14. # publish
  15. WORKDIR "/src/src/AOA.AbpOnDocker.Web"
  16. RUN yarn && gulp \
  17. && dotnet publish "AOA.AbpOnDocker.Web.csproj" -c Release -o /app/publish
  18. # build docker image
  19. FROM base AS final
  20. WORKDIR /app
  21. COPY --from=publish /app/publish .
  22. 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 中找到。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/991290
推荐阅读
相关标签
  

闽ICP备14008679号