我们对部署.netcore到linux有了充分的了解,已经可以满足应用需求。本篇文章,我们继续带大家深入了解使用Doker+jexus或者Nginx部署.netcore应用。1、使用Jexus作为Web服务器Jexus是Linux平台上的高性能WEB服务器和负载均衡网关服务器。其特点是支持ASP.NET、ASP.NETCORE、PHP,同时具有反向代理、入侵检测等重要功能。功能。可以说Jexus是.NET和.NETCORE最好的跨平台托管服务器。如果我们认为是Linux平台上的IIS,这也不为过,因为Jexus不仅速度很快,而且还有IIS和其他Web服务器。服务器所没有的高度安全性。同时,JexusWebServer是一款完全由国人自主研发的国产软件。真正做到“安全、可靠、可控”,具备我国党政机关和重要企事业单位远程桌面信息化建设所需的关键素质。Jexus官网:https://www.jexus.org/1.1、Jexus安装Jexus安装非常简单,执行以下命令:curlhttps://jexus.org/release/x64...sh注:运行安装命令,操作者需要有root权限。1.2.Jexus的配置和使用安装完成后,切换到/usr/jexus目录,在/usr/jexus/siteconf目录下修改默认。内容如下:注意:因为上一章使用了nginx,80端口,所以这里我使用8099端口。port=8099#Porthosts=*#DomainnameAppHost={cmd=dotnetCore50Test.dll;root=/root/app_data/core50test/publih;ort=5000}接下来,我们重启jexus,执行以下命令:/usr/jexus/jwsrestart提示后ok,我们的应用程序就启动了。执行如下命令可以看到执行结果:ps-aux,可以看到我们的应用已经启动了,浏览到使用8099端口的浏览器可以看到效果。更详细的jexus使用说明请参考官方文档。1.3.Jexus运行命令Jexus包括以下运行命令(先cd/usr/jexus):启动:sudo./jwsstart停止:sudo./jwsstop重启:sudo./jwsrestart2,前面部署的Docker+Nginx或者Jexus中文章介绍,无论是supervisor+nginx还是jexus,都需要在服务器上安装.NETCore的SDK或者runtime。如果我们有多个应用程序,每个应用程序使用的.netcore版本不同,上述方法需要我们分别安装相应的SDK或runtime,维护起来比较麻烦。Docker的出现可以完美解决以上问题。2.1.什么是码头工人?docker是一个开源软件部署解决方案;docker也是一个轻量级的应用容器框架;docker可以打包、发布和运行任何应用程序。Docker具有以下优势:1.快速一致地交付您的应用程序Docker允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化开发生命周期。容器非常适合持续集成和持续交付(CI/CD)工作流,请考虑以下示例场景:您的开发人员在本地编写代码并使用Docker容器与同事共享他们的工作。他们使用Docker将他们的应用程序推送到测试环境并执行自动或手动测试。当开发人员发现bug时,可以在开发环境中修复,重新部署到测试环境中进行测试验证。测试完成后,将修复推送到生产环境就像将更新的映像推送到生产环境一样简单。2.响应式部署和扩展Docker是一个基于容器的平台,允许高度可移植的工作负载。Docker容器可以在开发人员的本地计算机、数据中心的物理机或虚拟机、云服务或混合环境中运行。Docker的可移植性和轻量级特性还使您可以轻松地动态管理工作负载,并根据业务需求实时扩展或拆除应用程序和服务。3.在相同的硬件上运行更多的工作负载Docker轻量级且速度快。它为基于管理程序的虚拟机提供了一种可行、经济高效的替代方案,因此您可以利用更多的计算能力来实现您的业务目标。Docker是高密度环境和中小型部署的理想选择,您可以在其中事半功倍。2.2.docker安装执行如下命令:sudoyuminstalldockerPS:AnerrorisreportedAnotherappiscurrentltyholdingtheyumlock,waitingittoexit...解决办法:rm–r/var/run/yum.pid这个命令可以解锁并安装完成后,执行以下命令设置docker启动:systemctlenabledocker执行以下命令启动docker:systemctlstartdocker检查docker启动状态:ps:如果安装过程有问题,你可以直接运行命令安装。yuminstalldocker-ce-cli查看docker版本命令:2.3、.netcoredockersupport安装好docker后,我们需要在代码中加入dockerfile。VisualStudio可以帮我们自动生成。在解决方案中,右击项目名称,选择【添加】->【Docker支持】,如下图:生成的dockerfile如下:看https://aka.ms/containerfastmode了解VisualStudio使用此Dockerfile构建图像以加快调试速度。FROMmcr.microsoft.com/dotnet/aspnet:5.0-buster-slimASbaseWORKDIR/appEXPOSE80FROMmcr.microsoft.com/dotnet/sdk:5.0-buster-slimASbuildWORKDIR/srcCOPY["Core50Test.csproj",""]RUNdotnetrestore"./Core50Test.csproj"COPY。.WORKDIR"/src/."RUNdotnetbuild"Core50Test.csproj"-cRelease-o/app/buildFROMbuildASpublishRUNdotnetpublish"Core50Test.csproj"-cRelease-o/app/publishFROMbaseASfinalWORKDIR/appCOPY--from=publish/app/publish.ENTRYPOINT["dotnet","Core50Test.dll"]将代码推送到git仓库,然后从linux服务器拉取最新的代码。切换到/root/app_data/source/core50test目录,执行以下命令拉取最新代码:gitpull1然后执行以下命令将代码打包为镜像:dockerbuild-fDockerfile-tcore50test。镜像第一次打包涉及拉取.NETCore官方镜像拉取速度可能较慢,请耐心等待。打包完成后,执行以下命令查看当前服务器上已有的镜像:dockerimages镜像打包完成后,我们可以执行dockerrun命令来开启我们的应用:dockerrun-p81:80-dit--restart=always--namecore50testcore50test执行结果如下:通过浏览器访问:http://ip:81。如果不出意外,我们可以看到应用程序已成功运行。dockerrun:新建一个容器并运行一条命令语法dockerrun[OPTIONS]IMAGE[COMMAND][ARG...]OPTIONS说明:-astdin:指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR三种物品;-d:后台运行容器,返回容器ID;-i:以交互方式运行容器,通常与-t一起使用;-P:随机端口映射,容器内部端口随机映射到宿主机端口-p:指定端口映射,格式为:宿主机(主机)端口:容器端口-t:重新分配一个伪输入终端对于容器,通常与-i一起使用;--name="nginx-lb":为容器指定一个名称;--dns8.8.8.8:指定容器使用的DNS服务器,默认与宿主机相同;–dns-searchexample.com:指定容器的DNS搜索域名,默认与host相同;-h"mars":指定容器的主机名;-eusername="ritchie":设置环境变量;–env-file=[]:从指定文件中读取环境变量;--cpuset="0-2"or--cpuset="0,1,2":绑定容器到指定的CPU运行;**-m–net=“bridge”:指定容器的网络连接类型,支持bridge/host/none/container:四种;--link=[]:添加到另一个容器的链接;--expose=[]:打开一个端口或一组端口;–volume,-v:绑定一个volume2.4。通过shell脚本实现docker一键更新应用您可以通过编写shell脚本实现一键更新应用。在/root目录中,创建一个包含以下内容的dockerbuild.sh文件:!/bin/bashcd/root/app_data/source/core50testgitpullimtag=$(uuidgen|sed's/-//g')dockerbuild-fDockerfile-tcore50test:${imtag}.dockerstopcore50testdockerrmcore50testdockerrun-dit--restart=always--namecore50test-p81:80core50test:${imtag}设置dockerbuild.sh文件的执行权限,命令如下:chmod777dockerbuild.sh新代码推送到git仓库后,进入服务器执行dockerbuild.sh,快速更新应用。./dockerbuild.sh至此,使用docker部署.netcore就介绍完了。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|stat]pull|push|search]本地镜像管理-docker[build|images|rmi|tag|save|import|load]容器资源管理-docker[volume|network]系统日志信息-docker[events|history|logs]fromdocker从命令的使用开始,梳理如下命令结构图:查看更详细的命令可以查看官网或者命令帮助docker--help3。总结通过前面三篇文章的介绍,我们对Linux部署.netcore多种方案有了非常全面的了解,小团队就够了。细心的同学会注意到,目前的方案虽然可以实现一键部署和更新,但是仍然需要登录Linux服务器执行相应的命令。结果表明这不是最优解,那么有没有更好的解呢?比如:当我们提交到git仓库时,自动启动部署命令是不是更方便?答案是肯定的,我们可以使用jenkins来实现。有兴趣的可以自己研究一下,或者敬请期待接下来的讲解。以及大型项目中基于k8s的devops。其实k8s实现devops的原理和上面的介绍差不多。它基于借助gitlabrunner或jenkins监控git仓库的状态。当发现指定分支发生变化时,将镜像打包,然后自动替换k8s的部署镜像。更新。同时k8s实现了弹性伸缩、滚动更新等功能。几年来一路走来,感谢RDIFramework.NET框架的支持者和用户,您可以通过以下地址了解更多信息。RDIFramework.NET官网:http://www.rdiframework.net/RDIFramework.NET官方博客:http://blog.rdiframework.net/特别说明,框架相关技术文章请参考官网,欢迎关注收集!RDIFramework.NET框架由海南国思软件技术有限公司专业团队长期打造,并不断更新升级。请放心使用!在前两篇:.NETCore部署到linux(CentOS)最全方案,常规篇最全解决.NETCore到linux(CentOS),进阶篇(Supervisor+Nginx)我们deploy.netcoretolinux有了充分的了解,已经可以满足应用需求。在本文中,我们将继续带大家深入了解使用Doker+jexus或Nginx部署.netcore应用。
