乐趣区

关于linux:NET-Core部署到linuxCentOS最全解决方案高阶篇DockerNginx-或-Jexus

咱们对.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 利用。

退出移动版