由.NetCore在docker部署想到的


今天准备部署.net6 拉取docker时候只有基础镜像。

原谅刚接触.NET CORE,自认为docker之所以能跑.net core,是因为镜像准备好了代理服务器。

也就是早期啊,我们的JAVA要部署得tomcat,php得nginx,同样.net web得iis作为代理服务器,那到了core这里怎么就可以直接运行了呢。

思考一下。

一番资料查找下,真相远比想象的要复杂。

一 CoreCLR下封装的Kestrel

那么 asp.net core 及.net 6实现跨平台的本质。

ASP.NET Core 2.1+为IIS托管新增In-Process模型并作为默认选项(使用IISHttpServer替代了Kestrel,dotnet程序由IIS网站进程w3wp.exe内部托管)。

也主是.netcore内置了服务主机Kestrel,该主机的功能相当于IIS,可以完成对端口的监听及请求的转发,完全可以取代iis。该主机在程序启动时被运行,由于脱离了IIS的束缚,所以也完全可以部署在Linus系统上使用,这就是其跨平台的本质原因。

那么kestrel是个什么东西呢。

他是一个中间件,来处理tcp连接的服务器,并内置了http(包含websocket、SignalR)解析中间件。也就是说,我们完全可以给kestrel添加其它中间件,用来处理非http的连接的业务场景,让kestrel使用一个端口支持多种协议或多协议一个端口一种协议的要求。

详细可以看这两篇,对kestrel应该有了非常清晰的认识与理解:

2.

二 .Net Core运行周期

再回到.netcore,

我们去找有关.netcore生命周期的文章时,看到很多都会提到,运行的开始是program,你会惊讶,这不是控制台启动的入口吗?

然而的确是这样的。

在这篇文章中, 非常详细的介绍了Core运行的起点到终点过程。

尤其是那个我们天天可以看到的ConfigureServices与Configure,到底是什么时候启用的。

大体用下面这张图表示:

三 Docker安装与部署

1.centos安装docker

Install Docker Engine on CentOS | Docker Documentation 

2.docker基础知识

10分钟快速掌握Docker必备基础知识 - DockOne.io

3.Netcore快速部署docker 示例

以上就是学习.netcore基础原理与发布,资料取自互联网,学习路上少不了大神。