Asp.Net Core 使用Docker进行容器化部署(一)

时间:2021-11-09 13:31:56

 前几篇文章介绍了Liunx下的环境搭建,今天来分享一下.Net Core在Liunx上的部署。

我采用的方案是使用Dokcer作为运行虚拟机,Nginx作为Http服务器来进行反向代理,你可以理解为Docker就是程序的运行环境,而Nginx就是之前用的IIS。

文章分成两篇,第一篇写Docker部署,第二篇写Nginx代理。

一、编写Dockerfile

Dockerfile中记录了我们的程序在Docker环境中的各种配置

FROM microsoft/dotnet    #FROM 指定功能所需的基础镜像,必须是第一条指令,我们这里指定aspnetcore
WORKDIR /web                 #定义你工作目录的名字
COPY . ./                    #COPY 程序所在本地目录  容器目录  例如:COPY ${source:-bin/publish} ./hello 把source所在的目录下的,bin/publish子目录的内容复制到容器的hello目录
ENTRYPOINT ["dotnet", "CZKJ.CMS.Web.dll"]      #运行dotnet命令,参数是你的程序集的入口dll--就是你的Web程序dll

配置还有很多例如EXPOSE可以指定对外开放的端口,如果不指定就是默认80,以上几个配置足够一般的.NetCore程序使用,以上配置copy下来可以直接使用只需要更改最下面一行的程序集名字就好。

写好Dockerfile后把Dockerfile放到你的包根目录下,文件不要加后缀名就只叫:Dockerfile

Asp.Net Core 使用Docker进行容器化部署(一)

 

二、生成镜像


使用WinScp把你的程序集放到Liunx服务器上,WinScp是一个很好用工具,推荐下载而且免费。

Asp.Net Core 使用Docker进行容器化部署(一)

然后远程链接到你的Liunx服务器,推荐一个小工具:Putty很好用的小工具

CD到刚才上传上来的目录中:cd /website/PublishOutput    注意要到文件夹里

在这里运行Docker 命令:docker build -t <要生成的镜像的名称>  .  (注意,结尾有个点,这个点是Dockerfile的路径,因为Dockerfile现在就在当前目录下,所以打个点就行,-t 参数后的镜像名字不需要打<>)

例如: dcoerk build -t demo .

Asp.Net Core 使用Docker进行容器化部署(一)

Docker 会根据刚才配置的Dockerfile生成镜像,最后出现Successfully表示成功。

三、启动实例

 

上一步我们已经制作好了镜像,现在我们把镜像放到Docker里,让它跑起来。

执行Docker 命令:docker run -d --rm -p 5000:80 --name <实例名称>  <镜像名称>

-d会在启动成功后输出镜像的唯一标识码, --rm 会判断如果存在同名实例会删除替换  -p指定程序运行端口   宿主端口:容器端口    注:因为上文中没有指定EXPOSE所以容器的端口是80  --name 参数后的实例名和镜像名不需要带<>

如下图,我把服务器的5003端口指定到了容器的80端口,现在访问5003就会访问到DEMO程序

docker ps  查看所有已经部署的实例

Asp.Net Core 使用Docker进行容器化部署(一)

 

上面的这个命令所部署的实例会在容器重启或者服务器重启后自动卸载,也就是说一旦重启Docker服务或者镜像之后就这个实例就不存在了,需要重新Docker run,如下图,重启服务后刚才部署的实例没有了

Asp.Net Core 使用Docker进行容器化部署(一)

 

重启后自动部署使用这条命令:docker run -d  --restart=always -p 5000:80 --name <实例名>  <镜像名>   注:--restart 和 --rm 冲突,只能选择一个

如下图,使用--restart=always参数后重启将不影响实例

Asp.Net Core 使用Docker进行容器化部署(一)

 

 四、进入镜像进行文件的查看更改

执行命令 docker ps 查看现有实例,然后执行命令  docker exec -it <CONTAINER ID>  /bin/bash

如下图,这样我们就进入了镜像里面,这个web就是在Dockerfile里定义的那个WORKDIR参数

Asp.Net Core 使用Docker进行容器化部署(一)

在镜像里如果想使用vim看日志或者改配置的话,需要自己安装,因为镜像里是没有vim的可以考虑使用cat.

如果要安装的话执行以下命令:apt-get update   执行完之后执行 apt-get install vim

 

 安装完成后就可以使用vim了

 五、停止、删除实例和镜像

停止命令:docker stop  实例ID

如图,我们停止了刚才启动的实例

Asp.Net Core 使用Docker进行容器化部署(一)

删除已经生成的镜像命令 

docker images  查看所有的镜像

docker rmi  镜像ID   删除指定镜像

删除前需要停止镜像,否则会删除失败,如下图,首先要停止镜像,然后删除镜像,不然会报错

Asp.Net Core 使用Docker进行容器化部署(一)

至此,.NET Core在Docker中部署完毕,下一篇介绍使用Nginx进行反向代理。