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

 

posted @ 2022-05-25 15:43  春光牛牛  阅读(161)  评论(0编辑  收藏  举报