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默认创建网络提供的便利性。
本文来自博客园,作者:{春光牛牛,yak},转载请注明原文链接:https://www.cnblogs.com/yakniu/p/16303873.html
欢迎各位大佬们评论指正
QQ讨论群:610129902
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律