【ASP.Net Core】发布并在Docker中运行服务器

一、Linux环境问题

现在要部署一个用ASP.Net Core 2.1开发的服务器到CentOS6系统上,因为只是临时用下,所以打算直接独立发布,这样服务器上不用装asp runtime也可以跑起来,就是一个绿色程序的概念,和go一样,丢上去就能跑

注意"部署模式"选择的独立,运行时选择的linux-x64。

但是因为CentOS6这个系统自带的libc/libstdc++版本都很低,而ASP.Net Core 2.1生成的程序依赖的版本高,所以它依然跑不起来,作为linux小白的我,折腾半天后放弃了,决定改用Docker。

二、使用Docker

网上大部分教程都是采用编写Dockerfile文件的方法,然后打包程序到一个新镜像中,而我不用这种方法。我这里直接通过docker运行本地程序。

1、拉取镜像文件

拉取微软官方aspcore runtime镜像文件,执行“docker pull microsoft/dotnet:aspnetcore-runtime”,注意这里使用的是带“aspnetcore-runtime”TAG的镜像,这个镜像才有runtime。如果需要拉取特定的版本,比如2.1版本,可以用“docker pull microsoft/dotnet:2.1-aspnetcore-runtime”这样的写法,更多说明见https://hub.docker.com/r/microsoft/dotnet

拉取成功后通过“docker images”来查看

2、发布程序

注意部署模式改为“框架依赖”,目标运行时改为“可移植”。发布成功后将文件拷贝到服务器上,比如我放在“/home/www”下面。

最后执行“docker run -d -p 5000:80 -v /home/www:/app --workdir /app microsoft/dotnet:aspnetcore-runtime dotnet /app/MyServer.dll”,服务器就能跑起来了!

-d参数表示容器在后台运行,我们不需要进入到容器。

-p参数表示端口映射,“-p 5000:80”表示将容器的80端口映射到本地5000端口。

-v参数表示目录映射,将服务器的/home/www目录挂到容器的/app目录。

--workdir参数表示容器中服务程序的工作路径,也就是我们映射的/app目录。

“microsoft/dotnet:aspnetcore-runtime”表示要运行的镜像。

最后的"dotnet /app/MyServer.dll"表示容器启动后要执行的命令,这里也就是启动服务程序了,MyServer.dll是我的主程序文件名,你们修改为自己的即可。

最后可以通过"docker ps"来查看正在运行中的容器。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页