docker-compose之.netcore+mysql+Ocelot+nginx多容器部署
继上节介绍docker-compose之.netcore+mysql+Ocelot多容器部署,这节再加上nginx。
Why Need Nginx
.NET Core中默认的Web Server为Kestrel。
Kestrel可以很好的用来为ASP.NET提供动态内容,然而在Web服务方面没有IIS、Apache、Nginx这些全功能的服务器完善。我们可以借助一个反向代理服务器接收来自互联网的HTTP请求并在经过一些初步处理(比如请求的缓存和压缩、提供静态内容、SSL Termination)后将其转发给Kestrel。
借助反向代理服务器(本文使用Nginx),不仅可以给我们的Web网站提供了一个可选的附加层配置和防御,而且可以简化负载均衡和SSL设置。而更重要的是,反向代理服务器可以很好的与现有的基础设施进行整合。
借助反向代理服务器(Nginx),不仅可以给我们的Web网站提供了一个可选的附加层配置和防御,而且可以简化负载均衡和SSL设置。而更重要的是,反向代理服务器可以很好的与现有的基础设施进行整合。
如果我们当前这个Ocelot网关服务挂掉,系统的整个链路就会垮掉,系统的高可用性就无从谈起了。要想高可用,那就要实现集群。Ocelot网关集群实例如何管理和发现呢?这个任务我们就交给Nginx服务。
基于Consul集群、Ocelot集群和Nginx网关服务的微服务架构,这样既可以解决单节点Ocelot网关服务的不可靠性,也可以实现针对Ocelot网关集群的负载均衡。
项目结构
编写 docker-compose.yml 文件
version: '3' services: db: image: mysql:5.5 command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci container_name: db restart: always ports: - "3306:3306" environment: - MYSQL_PASSWORD=123456 - MYSQL_ROOT_PASSWORD=123456 - MYSQL_USER=yak networks: - dev volumes: - "./db:/var/lib/mysql" - "./conf/my.cnf:/etc/my.cnf" - "./init:/docker-entrypoint-initdb.d/" gateway: container_name: gateway build: context: ./OcelotGateway dockerfile: Dockerfile ports: - 80:80 environment: TZ: "Asia/Shanghai" ASPNETCORE_ENVIRONMENT: "Production" links: - a - b - c - d networks: - dev a: container_name: businessa hostname: Business_A build: context: ./BusinessProjectA dockerfile: Dockerfile ports: - 81:80 environment: TZ: "Asia/Shanghai" ASPNETCORE_ENVIRONMENT: "Production" networks: - dev b: container_name: businessb hostname: Business_B build: context: ./BusinessProjectA dockerfile: Dockerfile ports: - 82:80 environment: TZ: "Asia/Shanghai" ASPNETCORE_ENVIRONMENT: "Production" networks: - dev c: container_name: businessc hostname: Business_C build: context: ./BusinessProjectA dockerfile: Dockerfile ports: - 83:80 environment: TZ: "Asia/Shanghai" ASPNETCORE_ENVIRONMENT: "Production" networks: - dev - pro d: container_name: businessd hostname: Business_D build: context: ./Yak.Docker.Test dockerfile: Dockerfile ports: - 84:80 environment: TZ: "Asia/Shanghai" ASPNETCORE_ENVIRONMENT: "Production" networks: - dev - pro e: container_name: businesse hostname: Business_E build: context: ./Yak.DockerCompose.Api dockerfile: Dockerfile ports: - 85:80 environment: TZ: "Asia/Shanghai" ASPNETCORE_ENVIRONMENT: "Production" networks: - dev - pro depends_on: - db reverse-proxy: container_name: api.proxy image: nginx depends_on: - gateway ports: - "9090:8080" links: - gateway restart: always volumes: - ./nginx/proxy.conf:/etc/nginx/conf.d/default.conf networks: - dev networks: dev: driver: bridge pro: driver: bridge
编写 proxy.conf 文件
server { listen 8080; location / { proxy_pass http://gateway:80; } }
拷贝到服务器中
启动 docker-compose
1
|
docker-compose up -d --build |
http://192.168.192.141:9090/user/User/Get
测试
http://192.168.192.141:9090/weather/WeatherForecast
http://192.168.192.141:9090/business/Server/GetServerName
鸣谢:
微服务架构Consul集群、Ocelot网关集群和Nginx版本实现
基于Docker+Consul+Ocelot+Nginx搭建微服务架构
docker-compose .netcoreapi、mysql、nginx多容器部署
https://www.cnblogs.com/lsxqw2004/p/6709766.html#_label4
https://www.cnblogs.com/chenug/p/6916639.html
本文来自博客园,作者:{春光牛牛,yak},转载请注明原文链接:https://www.cnblogs.com/yakniu/p/16309523.html
欢迎各位大佬们评论指正
QQ讨论群:610129902