• 售前

  • 售后

热门帖子
入门百科

使用Docker Compose 实现nginx负载均衡的方法步骤

[复制链接]
阿豆学长长ov 显示全部楼层 发表于 2021-10-26 12:52:32 |阅读模式 打印 上一主题 下一主题
以Docker的网络管理,容器的IP设置为底子知识实现Nginx负载平衡

检察全部docker网络
  1. docker network ls
  2. /*
  3. NETWORK ID     NAME         DRIVER       SCOPE
  4. b832b168ca9a    bridge        bridge       local
  5. 373be82d3a6a    composetest_default  bridge       local
  6. a360425082c4    host         host        local
  7. 154f600f0e90    none         null        local
  8. */
  9. // composetest_default 是上一篇介绍Compose时,docker-compose.yml文件所在的目录名,
  10. // 所以,用docker-compose创建的容器会默认创建一个以目录名为网络名的网络,并且是dridge(桥接)类型
复制代码
指定容器IP所在
官网文档所在:https://docs.docker.com/compose/compose-file/#ipv4_address-ipv6_address
继承编写上一篇《12.使用Docker Compose容器编排工具》文章中的docker-compose.yml
  1. version: "3"
  2. services:
  3.   web1:
  4.     container_name: web1
  5.     image: "centos:httpd"
  6.     ports:
  7.       - "8080:80"
  8.     privileged: true
  9.     volumes:
  10.       - "/app/www/web1/:/var/www/html/"
  11.     command: ['/usr/sbin/init']
  12.     networks:
  13.       nginx-lsb:
  14.         ipv4_address: 192.169.0.3
  15.   web2:
  16.     container_name: web2
  17.     image: "centos:httpd"
  18.     ports:
  19.       - "8081:80"
  20.     privileged: true
  21.     volumes:
  22.       - "/app/www/web2/:/var/www/html/"
  23.     command: ['/usr/sbin/init']
  24.     networks:
  25.       nginx-lsb:
  26.         ipv4_address: 192.169.0.2
  27. networks:
  28.   nginx-lsb:
  29.     driver: bridge
  30.     ipam:
  31.       config:
  32.         - subnet: 192.169.0.0/16
复制代码
使用docker-compose启动容器
  1. docker-compose up -d
复制代码
检察容器是否启动,并确认是否创建了网络 nginx-lsb
  1. // 可以查看当前docker-compose.yml配置的容器组里的容器状态
  2. docker-compose ps
  3. docker network ls
  4. /*
  5. NETWORK ID     NAME          DRIVER       SCOPE
  6. b832b168ca9a    bridge         bridge       local
  7. 373be82d3a6a    composetest_default   bridge       local
  8. de6f5b8df1c8    composetest_nginx-lsb  bridge       local
  9. a360425082c4    host          host        local
  10. 154f600f0e90    none          null        local
  11. */
  12. // 创建了nginx-lsb网络,命名是容器组项目的 文件名开头_网络名
复制代码
检察网络 nginx-lsb的详情
  1. docker network inspect composetest_nginx-lsb
  2. // 详情里面可以看到使用这个网络的每个容器的ip
  3. 如:
  4. /*
  5. ...
  6. "Containers": {
  7.       "039aa860ef04f20a7566fdc943fb4398a61d2ad6dd3e373b17c86ac778af89e3": {
  8.         "Name": "web2",
  9.         "EndpointID": "1bc206661179e65999015f132c2889d3d4365b8d42b8a89cf9c260016fedd5ee",
  10.         "MacAddress": "02:42:c0:a9:00:02",
  11.         "IPv4Address": "192.169.0.2/16",
  12.         "IPv6Address": ""
  13.       },
  14.       "437ad7a07da8e46c0abaf845c4b08425338009fbe972bde69478cf47c75c315b": {
  15.         "Name": "web1",
  16.         "EndpointID": "5a36e602a5364ee9ad06e9816d09e3966d56ebf06b9394ebc25b8bcee9546607",
  17.         "MacAddress": "02:42:c0:a9:00:03",
  18.         "IPv4Address": "192.169.0.3/16",
  19.         "IPv6Address": ""
  20.       }
  21.     },
  22. ...
  23. */
复制代码
使用 env_file情况文件:
简单可以理解为:在docker-compose.yml中界说变量,引用在外部.env文件中举行变量界说
官方文档所在:https://docs.docker.com/compose/compose-file/#env_file
  1. // 还是在composetest目录中定义个 .env文件,用来存放变量
  2. web1_addr=192.169.0.2
  3. web2_addr=192.169.0.3
  4. // 修改docker-compose.yml文件,加入变量定义
  5. version: "3"
  6. services:
  7.   web1:
  8.     container_name: web1
  9.     image: "centos:httpd"
  10.     ports:
  11.       - "8080:80"
  12.     privileged: true
  13.     volumes:
  14.       - "/app/www/web1/:/var/www/html/"
  15.     command: ['/usr/sbin/init']
  16.     networks:
  17.       nginx-lsb:
  18.         ipv4_address: ${web1_addr}
  19.   web2:
  20.     container_name: web2
  21.     image: "centos:httpd"
  22.     ports:
  23.       - "8081:80"
  24.     privileged: true
  25.     volumes:
  26.       - "/app/www/web2/:/var/www/html/"
  27.     command: ['/usr/sbin/init']
  28.     networks:
  29.       nginx-lsb:
  30.         ipv4_address: ${web2_addr}
  31. networks:
  32.   nginx-lsb:
  33.     driver: bridge
  34.     ipam:
  35.       config:
  36.         - subnet: 192.169.0.0/16
复制代码
重新启动composetest项目,并检察网络详情,确认容器ip是否设置成功
  1. // 重新启动composetest项目
  2. docker-compose up -d
  3. // 查看网络详情
  4. docker network inspect composetest_nginx-lsb
复制代码
在composetest项目中添加一台nginx服务器作为负载平衡服务器
  1. // 在.env文件里添加一个变量 nginx_lsb
  2. web1_addr=192.169.0.2
  3. web2_addr=192.169.0.3
  4. nginx_lsb=192.169.0.100
  5. // 修改docker-compose.yml文件,加入变量定义
  6. version: "3"
  7. services:
  8.   nginx-lsb:
  9.     container_name: nginx-lsb
  10.     image: "centos:nginx"
  11.     ports:
  12.       - "8000:80"
  13.     privileged: true
  14.     volumes:
  15.       - "/app/nginx/nginx.conf:/etc/nginx/nginx.conf"
  16.     networks:
  17.       nginx-lsb:
  18.         ipv4_address: ${nginx_lsb}
  19.   web1:
  20.     container_name: web1
  21.     image: "centos:httpd"
  22.     ports:
  23.       - "8080:80"
  24.     privileged: true
  25.     volumes:
  26.       - "/app/www/web1/:/var/www/html/"
  27.     command: ['/usr/sbin/init']
  28.     networks:
  29.       nginx-lsb:
  30.         ipv4_address: ${web1_addr}
  31.   web2:
  32.     container_name: web2
  33.     image: "centos:httpd"
  34.     ports:
  35.       - "8081:80"
  36.     privileged: true
  37.     volumes:
  38.       - "/app/www/web2/:/var/www/html/"
  39.     command: ['/usr/sbin/init']
  40.     networks:
  41.       nginx-lsb:
  42.         ipv4_address: ${web2_addr}
  43. networks:
  44.   nginx-lsb:
  45.     driver: bridge
  46.     ipam:
  47.       config:
  48.         - subnet: 192.169.0.0/16
  49. // 重新启动composetest项目
  50. docker-compose up -d
复制代码
修改nginx.conf设置文件,设置负载平衡
  1. upstream mydocker {
  2.   server 192.169.0.2;
  3.   server 192.169.0.3;
  4. }
  5. server {
  6.   listen 80;
  7.   server_name mydocker;
  8.   location / {
  9.     proxy_set_header Host $host;
  10.     proxy_set_header X-Real-IP $remote_addr;
  11.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  12.     proxy_buffering off;
  13.     proxy_pass http://mydocker;
  14.   }
  15. }
复制代码
重新启动nginx-lsb,加载设置文件
  1. docker-composer restart nginx-lsb
复制代码
访问 http://服务器IP所在:8000,测试服务器负载平衡!
留意:上一篇已经在两台httpd服务器上放置了不同的web文件

以上就是本文的全部内容,盼望对大家的学习有所帮助,也盼望大家多多支持脚本之家。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作