咱们对.netcore部署到linux有了一个充沛的理解,曾经能够满足利用要求了,这篇文章咱们持续深刻带你理解应用Doker+jexus或Nginx来部署.net core利用。
1、应用Jexus作为web服务器
Jexus是一款Linux平台上的高性能WEB服务器和负载平衡网关服务器,以反对ASP.NET、ASP.NET CORE、PHP为特色,同时具备反向代理、入侵检测等重要性能。能够这样说,Jexus是.NET、.NET CORE跨平台的最优良的宿主服务器,如果咱们认为它是Linux平台的IIS,这并不为过,因为,Jexus岂但十分快,而且领有IIS和其它Web服务器所不具备的高度的安全性。同时,Jexus Web Server 是齐全由中国人自主开发的的国产软件,真正做到了“平安、牢靠、可控”, 具备我国党政机关和重要企事业单位信息化建设远程桌面所须要的要害品质。
jexus官网:https://www.jexus.org/
1.1、Jexus的装置
jexus的装置非常简单,执行如下命令:
curl https://jexus.org/release/x64... sh
注:运行装置命令,须要操作者有root权限。
1.2、Jexus的配置与应用
装置实现后,切换到/usr/jexus目录,批改/usr/jexus/siteconf目录下的default,内容如下所示:
注:因为在后面的章节用了nginx,应用了80端口,因而这儿我应用8099端口。
port=8099 #端口hosts=* #域名AppHost={cmd=dotnet Core50Test.dll; root=/root/app_data/core50test/publih; ort=5000}
接下来,咱们重启jexus,执行如下命令:
/usr/jexus/jws restart
提醒Ok后,咱们的利用就示意启动起来了。
能够通过执行如下命令,看下执行的后果:
ps -aux
能够看到咱们的利用曾经启动起来了,到浏览器应用8099端口浏览看下成果。
对于jexus更具体的应用阐明,请参考官网文档。
1.3、Jexus的操作命令
Jexus包含如下操作命令(首先 cd /usr/jexus):
启动:sudo ./jws start
进行:sudo ./jws stop
重启:sudo ./jws restart
2、Docker+Nginx或Jexus部署
在后面的文章介绍中,不论是supervisor+nginx还是jexus,都须要在服务器装置 .NET Core的SDK或者运行时,如果咱们多个应用程序,各应用程序所用.net core版本不一样,下面的做法就须要咱们别离装置对应的SDK或者运行时,对于保护还是比拟麻烦的。Docker的呈现,能够完满解决上述问题。
2.1、Docker是什么?
docker是一个开源的软件部署解决方案;
docker也是轻量级的利用容器框架;
docker能够打包、公布、运行任何的利用。
Docker有如下长处:
1、疾速,统一地交付您的应用程序
Docker 容许开发人员应用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合继续集成和继续交付(CI / CD)工作流程,请思考以下示例计划:
您的开发人员在本地编写代码,并应用 Docker 容器与共事共享他们的工作。
他们应用 Docker 将其应用程序推送到测试环境中,并执行主动或手动测试。
当开发人员发现错误时,他们能够在开发环境中对其进行修复,而后将其重新部署到测试环境中,以进行测试和验证。
测试实现后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简略。
2、响应式部署和扩大
Docker 是基于容器的平台,容许高度可移植的工作负载。Docker 容器能够在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的个性,还能够使您轻松地实现动静治理的工作累赘,并依据业务需要批示,实时扩大或拆除应用程序和服务。
3、在同一硬件上运行更多工作负载
Docker 笨重疾速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的代替计划,因而您能够利用更多的计算能力来实现业务指标。Docker 非常适合于高密度环境以及中小型部署,而您能够用更少的资源做更多的事件。
2.2、docker装置
执行如下命令:
sudo yum install docker
PS:
遇报错 Another app is currentlty holding the yum lock ,waiting for it to exit…
解决办法: rm –r /var/run/yum.pid 这个命令 解锁即可
装置实现后,执行如下命令设置docker开机启动:
systemctl enable docker
执行如下命令启动docker:
systemctl start docker
查看docker启动状态:
ps:装置过程有问题的话,可能间接运行如命令装置。
yum install docker-ce-cli
查看docker版本命令:
2.3、.net core docker反对
装置docker之后,咱们须要在代码里减少dockerfile文件。
通过Visual Studio能够帮咱们主动生成,在解决方案中,右击项目名称,顺次抉择【增加】->【Docker反对】,如下图所示:
生成的dockerfile文件如下所示:
See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["Core50Test.csproj", ""]
RUN dotnet restore "./Core50Test.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "Core50Test.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Core50Test.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Core50Test.dll"]
将代码推送到git仓库,而后再linux服务器中拉取最新代码。
切换到/root/app_data/source/core50test目录,执行如下命令,拉取最新代码:
git pull
1
而后执行如下命令,将代码打包为镜像:
docker build -f Dockerfile -t core50test .
首次打包镜像波及到拉取.NET Core的官网镜像,拉取速度可能较慢,请急躁期待。
打包实现后,执行如下命令,可查看以后服务器已存在的镜像:
docker images
镜像打包实现后,咱们就能够执行docker run命令启用咱们的利用了:
docker run -p 81:80 -dit --restart=always --name core50test core50test
执行后果如下:
通过浏览器拜访:http://ip:81。如无意外,咱们能够看到利用曾经胜利运行。
docker run :创立一个新的容器并运行一个命令
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS阐明:
-a stdin: 指定规范输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后盾运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时应用;
-P: 随机端口映射,容器外部端口随机映射到主机的端口
-p: 指定端口映射,格局为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输出终端,通常与 -i 同时应用;
–name=“nginx-lb”: 为容器指定一个名称;
–dns 8.8.8.8: 指定容器应用的DNS服务器,默认和宿主统一;
–dns-search example.com: 指定容器DNS搜寻域名,默认和宿主统一;
-h “mars”: 指定容器的hostname;
-e username=“ritchie”: 设置环境变量;
–env-file=[]: 从指定文件读入环境变量;
–cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
**-m
–net=“bridge”: 指定容器的网络连接类型,反对 bridge/host/none/container: 四种类型;
–link=[]: 增加链接到另一个容器;
–expose=[]: 凋谢一个端口或一组端口;
–volume , -v: 绑定一个卷
2.4、通过shell脚本实现docker一键更新利用
能够通过编写shell脚本,实现一键更新利用。在/root目录中,创立dockerbuild.sh文件,文件内容如下:
!/bin/bash
cd /root/app_data/source/core50testgit pullimtag=$(uuidgen |sed 's/-//g')docker build -f Dockerfile -t core50test:${imtag} .docker stop core50testdocker rm core50testdocker run -dit --restart=always --name core50test -p 81:80 core50test:${imtag}
给dockerbuild.sh文件设置执行权限,命令如下:
chmod 777 dockerbuild.sh
当有新代码推送到git仓库时,进入服务器,执行dockerbuild.sh即可疾速更新应用程序。
./dockerbuild.sh
至此,.net core应用docker形式部署介绍实现。
2.5、docker常用命令
Docker常用命令,总的来说分为以下几种:
Docker环境信息 — docker [info|version]
容器生命周期治理 — docker [create|exec|run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker [ps|inspect|top|attach|wait|export|port|rename|stat]
容器rootfs命令 — docker [commit|cp|diff]
镜像仓库 — docker [login|pull|push|search]
本地镜像治理 — docker [build|images|rmi|tag|save|import|load]
容器资源管理 — docker [volume|network]
系统日志信息 — docker [events|history|logs]
从docker命令应用登程,梳理出如下命令结构图:
要查看更具体的命令,能够查看官网或者命令帮忙
docker --help
3、总结
通过后面三篇文章的介绍,咱们曾经对.net core多计划部署到linux下有了十分全面的意识,小型团队曾经足够应用。留心的同学会留神到,尽管目前的计划能够实现一键部署更新,然而还是须要登陆到linux服务器去执行相应的命令。
显示,这不是最优的计划,那么还有没有更好的计划呢?比方:当咱们提交给git仓库后,主动登程部署命令是不是就更不便了呢?
答案是必定的,咱们能够借助jenkins来实现。如有趣味,能够自行钻研,或者敬请期待前面的解说。以及在大型项目中基于k8s实现的devops。其实k8s实现devops的原理以下面的介绍差不多,基于就是借助gitlab的runner或者jenkins,监听git仓库的状态,当发现指定的分支发生变化后,打包镜像,而后通过替换k8s的deployment的镜像来实现自动更新。同时,k8s实现了弹性伸缩、滚动更新等性能。
一路走来数个年头,感激RDIFramework.NET框架的支持者与使用者,大家能够通过上面的地址理解详情。
RDIFramework.NET官方网站:http://www.rdiframework.net/
RDIFramework.NET官网博客:http://blog.rdiframework.net/
特地阐明,框架相干的技术文章请以官方网站为准,欢送大家珍藏!
RDIFramework.NET框架由海南国思软件科技有限公司业余团队长期打造、始终在更新、始终在降级,请放心使用!
在前两篇:
.NET Core部署到linux(CentOS)最全解决方案,惯例篇
.NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx)
咱们对.netcore部署到linux有了一个充沛的理解,曾经能够满足利用要求了,这篇文章咱们持续深刻带你理解应用Doker+jexus或Nginx来部署.net core利用。