docker-compose之.netcore+mysql+Ocelot多容器部署

继上节.NetCoreApi容器与MySql容器互联继续讲解,主要增加了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
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
networks:
  dev:
    driver: bridge
  pro:
    driver: bridge

  

编写 ocelot.json 文件

复制代码
{
  "Routes": [
    {
      "UpstreamPathTemplate": "/business/{url}",
      "UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete", "Patch", "Options", "Head", "Trace", "Connect", "Purge", "None" ],
      "DownstreamPathTemplate": "/{url}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Port": "80",
          "Host": "businessa"
        },
        {
          "Port": "80",
          "Host": "businessb"
        },
        {
          "Port": "80",
          "Host": "businessc"
        }
      ],
      "LoadBalancerOptions": {
        "Type": "LeastConnection",
        "Exact": true
      }
    },
    {
      "UpstreamPathTemplate": "/weather/{url}",
      "UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete", "Patch", "Options", "Head", "Trace", "Connect", "Purge", "None" ],
      "DownstreamPathTemplate": "/{url}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Port": "80",
          "Host": "businessd"
        }
      ],
      "LoadBalancerOptions": {
        "Type": "LeastConnection",
        "Exact": true
      }
    },
    {
      "UpstreamPathTemplate": "/user/{url}",
      "UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete", "Patch", "Options", "Head", "Trace", "Connect", "Purge", "None" ],
      "DownstreamPathTemplate": "/{url}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Port": "80",
          "Host": "businesse"
        }
      ],
      "LoadBalancerOptions": {
        "Type": "LeastConnection",
        "Exact": true
      }
    }
  ],
  "DynamicReRoutes": [],
  "Aggregates": [],
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost"
  }
}
复制代码

 

代码拷贝到Linux系统中

 

 

启动 docker-compose
1
docker-compose up -d --build

  

 

 

 

查看

 

1
docker-compose ps

  

 

 

 

访问 http://192.168.192.138/user/User/Get

 

 

 

 

 

 

Docker网络(重要)
 可以看到在使用docker-compose管理项目的时候,docker-compose会自动给我们创建一个项目网络,这是docker-compose的网络默认规则,创建的项目网络可以方便我们管理维护项目,同一个项目的所有服务可以直接互相通过服务名访问!!!

 这样的一个好处是:开发不需要在配置中写死某个服务的IP地址,只需要写服务名即可,当该服务异常挂掉,同一个服务重启后IP可能会不同,如果写死的话就得去更改,很麻烦。所以这就是docker-compose默认创建网络提供的便利性。

 

posted @   春光牛牛  阅读(134)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示