Docker结合.Net Core的初步使用教程(2)

-p参数:容器的 7000 端口映射到宿主机的 8001 端口。-it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。myimage:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。-d参数:容器启动后,后台运行。

Docker结合.Net Core的初步使用教程

容器生成之后,我们通过命令docker container ls可以看到正在运行的容器。

.NetCore WebApi部署docker

好了,前面我们简单了介绍了一些Docker的一些简单入门,下面我们结合.netcore webapi应用程序具体给大家说一说实际项目中如何使用Docker。

1.新建一个.NetCore WebApi项目,并启用docker支持。

Docker结合.Net Core的初步使用教程

如果创建的项目忘记启用docker,也不用担心,我们可以右键项目,添加-->docker支持。

2.修改dockerfile文件,如下:

FROM microsoft/dotnet:2.2-aspnetcore-runtime WORKDIR /app COPY . . EXPOSE 7000 ENTRYPOINT ["dotnet", "NetCoreSqlSugar.dll"]

dockerfile文件右键--属性,选择始终复制,可以直接发布到目录。

Docker结合.Net Core的初步使用教程

3.修改应用程序端口号(Program.cs文件)

public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseUrls("http://*:7000") .UseStartup<Startup>();

我这里用了最简单的方式UseUrls方法定义了端口号,实际项目中并不推荐大家这么使用。偷懒了。。。哈哈

4.发布项目

发布应用程序到执行目录,我们会发现发布目录多了一个dockerfile文件。

5.生成image文件和容器

#生成image文件 $ docker image build -t myimage . #创建容器并运行 $ docker container run -p 8001:7000 -it -d myimage

到了这里,基本上我们任务都完成了。但是使用windows的同学会发现当我们使用:8001/api/Values访问API应用程序模板接口时,并不可行,那么问题来了???

这里我们回到docker启动,docker启动成功之后会提供我们一个IP地址:192.168.99.100。那么这个IP到底是干什么用的呢?

我们知道Docker是运行在Linux上的,在Windows中运行docker,实际上还是在Windows下先安装了一个Linux虚拟环境,然后再运行的docker。也就是说,应用程序中使用的localhost指的是这个Linux环境的地址,而不是我们的宿主环境Windows。这下大家也就恍然大悟了。我们在浏览器输入::8001/api/Values 果然可以正常访问。

Nginx实现局域网访问

上面我们在本地虽然可以通过192.168.99.100这个IP访问容器中的API接口,但是并不能被其他同事访问。前端时间刚好接触了Nginx,于是,这里果断搬了出来,通过Nginx的“反向代理”来解决这个问题。至于为什么选择这种方式,其实也是自己想重温下Nginx的使用,小小自私一下。。。关于Nginx的使用我这里就不赘述了,感兴趣的同学可以去了解下。

Nginx配置

upstream serlist{ server 192.168.99.100:8001;#实际请求地址 } server { listen 8001; server_name 192.168.60.4;#本机地址 #charset koi8-r; #access_log logs/host.access.log main; location ~ { proxy_pass ; proxy_connect_timeout 10; #连接超时 默认为60秒 proxy_send_timeout 10; #读取超时 默认为60秒 proxy_read_timeout 10; #发送超时 默认为60秒 } }

有了如上配置之后,局域网内的同事就可以通过我Windows下的本机地址192.168.60.4:8001直接访问我本机容器内的接口了,方便了大家调试调用。

以上学习内容有不足的地方,欢迎大家多多交流。

总结

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/09d46e4a34ec9921dafd2fb3dda97cf0.html