1. docker基础玩法
关键点:
- 安装centos7
- 在里面安装docker,升级到最新docker版本,熟悉相关命令。
相关命令如:
- 然后在docker里面下载redis,rabbitmq等的镜像,启动,当作正常服务来用,体验很好。而且资源占用惊人地少。
2. docker中部署springboot项目
关键点:
- 自己写个简单的springboot项目,打包成
.jar
文件。(值得一提的是,pom.xml
文件中可能要增加对应的<build>
节点。) - 将jar文件上传到centos机器中
- 建立Dockerfile,自己打包镜像
- 启动镜像,也即将springboot项目部署到了docker中。
相对较为简单,细节以后补充
3. docker中部署.NET 5 web项目(重点)
自己建立一个简单的.net5 web项目,就是mvc之类的。
3.1 windows,iis中部署此项目
要点:
- 应用程序池也不见得非得是 托管的或者非托管的,都行。
- visual studio中选中项目,发布。 如果准备用于windows中部署,就不要选择
生成单文件
了。否则会遇到500.38
错误。官方这么说的,我们照着这么用就行了。 - 然后就可以像访问 .net framework web项目一样正常访问就差不多了。
3.2 centos7 ,部署此web项目
要点:
有用的官方文档:
使用 Nginx 在 Linux 上托管 ASP.NET Core
- 安装.net5 SDK
- 安装ngxin,正常启动等不提了。
- 修改nginx的配置文件,配置反向代理
- 在开发机器中,使用visual studio发布项目,目标为 linux-64。然后将产生的许多文件全部上传到centos机器中。
- 然后在centos机器中,使用命令
dotnet myWebsite.dll
启动此项目,控制台明显可见输出内容。(我记得.net core某些版本的启动命令不是这样的,但不重要,这个.net5的项目的启动命令就是这样的) - 然后从其他机器中,访问nginx的 ip:80 即可被反向代理到这个.net5 web项目中,也即成功部署了项目到centos7中。
其中的一个关键内容,修改ngxin.conf文件的一部分内容为:
linux 守护进程什么的不提了,可有可无。
至于linux基本的防火墙端口开放,或者干脆防火墙关闭什么的基操,略。
3.3 centos7 中的docker中,部署此web项目
此部分是本文的精华部分
开发此项目使用Visual Studio,在windows
机器上,称此机器为A。
部署此项目在一个安装了docker的CentOS7
机器上,称此机器为B。
步骤如下。
3.3.1. 先不妨给自己的docker中安装必要的镜像(但这一步并非必要,后面会提到)
B 机器中
跳转到:
然后直接装sdk:
地址
3.3.2. 给.NET5项目,添加Dockers支持
A 机器中
会产生一个Dockerfile
文件,这个文件就是将此项目打包为docker镜像的必要文件。
得到Dockerfile
Dockerfile的内容形如
以下即是我这个示例.net5项目产生的Dockerfile文件的内容
只是个示意,不用在意细节,不同的项目产生的内容当然是不同的。
另外,值得一提的是前面几行 FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
等,会在产生我们自己的项目镜像前自动下载需要的这个镜像,这也就响应了前面 3.3.1
节提到的后面会解释。
3.3.4 然后这个项目是由git管理的,我在docker所在的服务器中将此项目clone
下来,并生成镜像
B机器中
git clone this-project.git
,在B机器中得到此项目的源码,比如得到 目录 this-projecct
,里面就是项目源码。
当然,要切换到前面A机器中添加docker支持
时对应的分支上,两边代码保持一致。
然后,将A机器中刚才产生的那个Dockerfile文件设法传送到B机器中,放到 this-project
目录下的根目录中。
然后执行docker build -t this-project:v1 .
,然后就开始不是那么快的镜像打包。
会依次下载需要的镜像,然后编译编码,最终产生项目的镜像。
以下是我此次操作的过程截图:
上图可见,最终确实产生了镜像,也即图片中下部的 xj-demo:v1
这个镜像。
ps: 如果有个报错,可参考这里:
Unable to load the service index for source https://api.nuget.org/v3/index.json
3.3.5 启动镜像,也即在docker中启动项目
如下图,启动镜像。
其中,从命令中可见,将镜像启动后的80端口映射到B机器自身的80端口。
那么,理论上我访问B机器的80端口,就可以看到启动成功的网站。
试一下:
如图,访问成功。
也即此.net5 web项目在docker中部署成功。
顺便看一下docker ps
完美实现预期。