.Net Core微服务入门全纪录(八)——Docker Compose与容器网络
Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章。 前言上一篇【.Net Core微服务入门全纪录(七)——IdentityServer4-授权认证】中使用IdentityServer4完成了鉴权中心的搭建,配合网关实现了统一的授权认证。进行到这里,系统环境已经比较复杂了,想把整个系统运行起来会非常繁琐:要运行Consul、业务服务、网关、鉴权中心、web客户端,还要安装数据库、MQ等等。。。那么本篇将使用Docker Compose来解决以上问题,仅需一个简单的命令,即可启动整个环境。 Docker Compose什么是Docker Compose?
简单来理解,Compose类似一个批量工具,可以执行一组命令,支持批量构建镜像,批量启动容器,批量删除容器等等功能。 Windows的Docker Desktop中已经包括了Compose,Linux下Compose则需要单独安装一下。 yml fileyml文件是使用Compose必不可少的,在编写yml文件之前还需要准备Dockerfile。 之前的章节中,有些服务不是在Docker中运行的,现在全部放到Docker中。确保解决方案中每个项目都添加Docker支持。 在根目录新建docker-compose.yml文件: 以下是docker-compose.yml文件内容:
以上yml文件定义了auth,web,apigateway,productapi1,productapi2,productapi3,orderapi1,orderapi2,orderapi3,consul,postgres,rabbitmq 12个服务(容器),和一个容器网络 my-net。这里的productapi和orderapi相当于是基于同样的镜像各运行了3个容器,这其实不太合理,正常他们应该分布在多个docker中。。。 文件的内容虽然有点多,但是应该不难理解,上面的关键字我都有注释(注意,正式使用最好还是不要加中文注释,可能会出现编码格式错误问题)。下面再简单介绍一下文件中的networks容器网络。 容器网络前面的章节中有提到过,默认情况下容器之间的通讯是比较麻烦的,之前是通过 代码修改既然程序都运行在docker中,那就不能写 还有多处修改就不全贴出来了,都是些类似的改动。这些配置还是不要写在代码里,改动起来比较乱。 这里有一个特殊的就是identityserver4鉴权服务,这个服务是容器内外部都需要访问的(容器内部ids4发现文档等接口的调用,外部浏览器访问),所以不能直接写服务名auth,写auth的话外部无法访问,写localhost的话内部又无法访问。最后是参考eShopOnContainers项目,使用 理论上用 eShopOnContainers项目是微软官方出品的开源项目,对于学习微服务,docker等技术非常有帮助。 项目地址:https://github.com/dotnet-architecture/eShopOnContainers 构建与启动完成以上操作后,进入项目根目录执行 build完成后,执行 (第一次up,orderapi2,orderapi3,productapi2,productapi3这4个服务会起不来,是因为他们启动时有创建数据库的操作,同时启动会导致后起来的4个重复的服务创建数据库时报错,因为orderapi1和productapi1在创建同样的数据库。。。这个前面说过的。这里等up完再执行一次up就好了) 浏览器访问:http://localhost:5000/ 登录后: 这样运行系统是不是非常简单呢?想要摧毁这个环境也很简单,只需要一句 如果不习惯docker命令,推荐使用vscode,装一下docker插件,很方便。 总结上文用到了Docker-Compose的3个命令: 构建: 启动: 销毁: 其实build命令也可以省略,执行up时如果没有build的话会自动build,无论多复杂的系统环境,只需要一个 主要的工作量在于docker-compose.yml文件的编写。 需要代码的点这里:https://github.com/xiajingren/NetCoreMicroserviceDemo (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何杀死会话或会话ID(ASP.NET/C)
- EventBus/EventQueue 再思考
- asp.net-membership – 如何获得会员资格的用户ID?
- asp.net-mvc – 如何将特定于HTTP-Request的对象注入到我提
- 当我的Login.aspx不在我的应用程序的根目录时,如何使用ASP.
- asp.net – 从承载令牌(Web API)获取自定义声明值
- asp.net-core – ASP .Net核心Google身份验证
- asp.net – System.Web.Cache和HTTPContext.Curent.Cache之
- asp.net-mvc-3 – [显示(提示MVC3
- 实体框架 – ASP.NET OData – 使用带数据传输对象的Delta实
- asp.net-core – 如何将POCO控制器作为控制器发现
- asp.net-mvc – mvc3 maxLength输入
- 将ASP.NET添加到ASP.NET文本框控件的OnBlur属性
- asp.net-mvc – 如何在mvc actionlink语法中添加
- ASP.NET Core 2.0中Razor页面禁用防伪令牌验证
- asp.net – 我可以通过编程方式禁用更新面板吗?
- asp.net-mvc-3 – 如何在Razor中创建一个else if
- 开始使用ASP.NET Identity,初级篇
- asp.net – 使用ASP MVC 3 RC和.NET 4中的Reques
- asp.net – IIS7中的SQL Server和Windows身份验证