本文讲解的是.net5创建的一个小项目Demo,发布后的文件,添加个Dockerfile 就可以在Docker上正常运行。
写作的目的:
1、不建议使用Visual Studio 自带的Dockerfile+Docker Desktop 这个组合,因为使用这个玩意,你都不知道它到底干了些啥。
2、我们发布站点的通常做法是,使用VS发布项目到文件夹,然后将发布的文件夹拷贝到站点目录下,然后创建IIS站点,那么Docker环境下是否也可以这么操作呢?答案是肯定的。
3、本地电脑安装了VMware虚拟机后,Docker Desktop就无法正常使用了,两者不能同时生效。
4、熟悉Docker的build->run 的过程玩法。
接下来我们开始干活!
1、先在准备一台安装好Docker的Linux虚拟机,若不会,请看我这篇文章《
Docker实战 一文搞定docker的所有操作》,建议大家都在电脑上安装下,我们开发者不仅要面向对象编程,还要面向运维编程!!!2、VS创建一个WebAPI项目,目标框架选择.NET 5.0 。
3、项目创建完毕,默认会有一个Controller以及Swagger页面,F5运行一下,只要不报错即可。swagger访问记下一个测试地址,这个地址后面有用。
http://localhost:38175/WeatherForecast
4、VS里项目右击--发布--文件夹,指定文件夹,进行正常的发布。
5、发布好后,在发布后的文件目录下创建一个Dockerfile文件。
Dockerfile文件的内容如下,比较简单,一共5句话:
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS baseEXPOSE 80WORKDIR /muxuedotapiCOPY . /muxuedotapiENTRYPOINT ["dotnet", "WebAPITest.dll"]
第1行指定基础镜像,
第2行对外暴露80端口,
第3行指定工作目录(不需要事先创建),
第4行拷贝当前目录下的所有文件到工作目录下,
第5行执行我们的webapi项目。
这5行代码一定要熟记。
6、将包括Dockerfile的所有发布文件传到Linux的一个目录下。方法很多,上传后的目录如下:
7、进入到这个目录下
cd testapi2
查看当前目录里的内容:
[root@centos7-9 testapi2]# ls
8、docker build构建镜像
docker build -t dotapidockertest .
语法问 docker build -t 自定义镜像名 .
注意:后面有个 .号别忽视了。
回车后构建,初次构建比较慢,因为还需要下载net5的基础镜像,第2次以后就会变快很多。
构建镜像成功后,可以看下生成的镜像:
docker images
我们看到 第一条 dotapidockertest 就是我们刚刚构建的镜像。
9、docker run运行镜像
docker run -d -p 8083:80 --name dotapicontainer2 dotapidockertest
-d表示后台运行;
-p 指定端口,Linux的端口8083对应容器的80端口,这个80端口要跟Dockerfile暴露的端口保持一致;
--name 指定容器的名称
最后面写上我们刚刚构建的镜像名。
回车后:
[root@centos7-9 testapi2]# docker run -d -p 8083:80 --name dotapicontainer2 dotapidockertest968061d39a9954f3e1a8c8c16f4cc60f50a33ea570b87ca4012cff9657dbbfec
说明容器启动成功了。
我们来测试下:
curl 192.168.157.100:8083
返回的是空,说明已经通了,但是/swagger好像也是空了,我们可以通过具体的接口地址来访问。用本地浏览器:
http://192.168.157.100:8083/WeatherForecast
192.168.157.100是我Linux的IP,加上端口8083,然后是接口地址。访问成功了。
.Net5项目部署到Docker环境的工作就完成了。
接下来我们可以看下一些信息:
1、看下正在运行的容器:
docker ps -a
2、看下.Net5项目运行的情况:
docker logs dotapicontainer2
3、我们还可以进入容器里看下里面的情况:
docker exec -it dotapicontainer2 /bin/bash
进去默认的目录就是我们Dockerfile指定的工作目录/muxuedotapi 。



