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 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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 文件

1
2
3
4
5
6
7
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

 

posted @   春光牛牛  阅读(177)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示