使用Docker Compose 实现nginx负载均衡

 2023-12-24  阅读 4  评论 0

摘要:以的网络管理,容器的IP设置为基础知识实现Nginx 查看所有docker网络 docker network ls /* NETWORK ID NAME DRIVER SCOPE b832b166.6ca9a bridge bridge local 373be82d3a6a composetest_default bridge local a360425082c4 host host local 154f600f0e90 none null local

使用Docker Compose 实现nginx负载均衡

的网络管理,容器的IP设置为基础知识实现Nginx

查看所有docker网络

docker network ls    /*  NETWORK ID     NAME         DRIVER       SCOPE  b832b166.6ca9a    bridge        bridge       local  373be82d3a6a    composetest_default  bridge       local  a360425082c4    host         host        local  154f600f0e90    none         null        local    */    // composetest_default 是上一篇介绍Compose时,docker-compose.yml文件所在的目录名,  // 所以,用docker-compose创建的容器会默认创建一个以目录名为网络名的网络,并且是dridge(桥接)类型  

指定容器IP地址

官网文档地址:https://docs.docker.com/compose/compose-file/#ipv4_address-ipv6_address

继续编写上一篇《12.使用Docker Compose容器编排工具》文章中的docker-compose.yml

version: "3"  services:    web1:      container_name: web1      image: "centos:httpd"      ports:        - "8080:80"      privileged: true      volumes:        - "/app/www/web1/:/var/www/html/"      command: ['/usr/sbin/init']      networks:        nginx-lsb:          ipv4_address: 192.169.0.3    web2:      container_name: web2      image: "centos:httpd"      ports:        - "8081:80"      privileged: true      volumes:        - "/app/www/web2/:/var/www/html/"      command: ['/usr/sbin/init']      networks:        nginx-lsb:          ipv4_address: 192.169.0.2  networks:    nginx-lsb:      driver: bridge      ipam:        config:          - subnet: 192.169.0.0/16  

使用docker-compose启动容器

docker-compose up -d

查看容器是否启动,并确认是否创建了网络 nginx-lsb

// 可以查看当前docker-compose.yml配置的容器组里的容器状态  docker-compose ps    docker network ls    /*  NETWORK ID     NAME          DRIVER       SCOPE  b832b166.6ca9a    bridge         bridge       local  373be82d3a6a    composetest_default   bridge       local  de6f5b8df1c8    composetest_nginx-lsb  bridge       local  a360425082c4    host          host        local  154f600f0e90    none          null        local  */    // 创建了nginx-lsb网络,命名是容器组项目的 文件名开头_网络名    

查看网络 nginx-lsb的详情

docker network inspect composetest_nginx-lsb    // 详情里面可以看到使用这个网络的每个容器的ip    如:    /*  ...   "Containers": {        "039aa860ef04f20a7566fdc943fb4398a61d2ad6dd3e373b17c86ac778af89e3": {          "Name": "web2",          "EndpointID": "1bc206661179e65999015f132c2889d3d4365b8d42b8a89cf9c260016fedd5ee",          "MacAddress": "02:42:c0:a9:00:02",          "IPv4Address": "192.169.0.2/16",          "IPv6Address": ""        },        "437ad7a07da8e46c0abaf845c4b08425338009fbe972bde69478cf47c75c315b": {          "Name": "web1",          "EndpointID": "5a36e602a5364ee9ad06e9816d09e3966d56ebf06b9394ebc25b8bcee8846607",          "MacAddress": "02:42:c0:a9:00:03",          "IPv4Address": "192.169.0.3/16",          "IPv6Address": ""        }      },  ...  */    

使用 env_file环境文件:

简单可以理解为:在docker-compose.yml中定义变量,引用在外部.env文件中进行变量定义

官方文档地址:

// 还是在composetest目录中定义个 .env文件,用来存放变量  web1_addr=192.169.0.2  web2_addr=192.169.0.3    // 修改docker-compose.yml文件,加入变量定义  version: "3"  services:    web1:      container_name: web1      image: "centos:httpd"      ports:        - "8080:80"      privileged: true      volumes:        - "/app/www/web1/:/var/www/html/"      command: ['/usr/sbin/init']      networks:        nginx-lsb:          ipv4_address: ${web1_addr}    web2:      container_name: web2      image: "centos:httpd"      ports:        - "8081:80"      privileged: true      volumes:        - "/app/www/web2/:/var/www/html/"      command: ['/usr/sbin/init']      networks:        nginx-lsb:          ipv4_address: ${web2_addr}  networks:    nginx-lsb:      driver: bridge      ipam:        config:          - subnet: 192.169.0.0/16    

重新启动composetest项目,并查看网络详情,确认容器ip是否设置成功

// 重新启动composetest项目  docker-compose up -d    // 查看网络详情  docker network inspect composetest_nginx-lsb    

在composetest项目中添加一台nginx主机作为负载均衡主机

// 在.env文件里添加一个变量 nginx_lsb  web1_addr=192.169.0.2  web2_addr=192.169.0.3  nginx_lsb=192.169.0.100    // 修改docker-compose.yml文件,加入变量定义  version: "3"  services:    nginx-lsb:      container_name: nginx-lsb      image: "centos:nginx"      ports:         - "8000:80"      privileged: true      volumes:        - "/app/nginx/nginx.conf:/etc/nginx/nginx.conf"      networks:        nginx-lsb:          ipv4_address: ${nginx_lsb}    web1:      container_name: web1      image: "centos:httpd"      ports:        - "8080:80"      privileged: true      volumes:        - "/app/www/web1/:/var/www/html/"      command: ['/usr/sbin/init']      networks:        nginx-lsb:          ipv4_address: ${web1_addr}    web2:      container_name: web2      image: "centos:httpd"      ports:        - "8081:80"      privileged: true      volumes:        - "/app/www/web2/:/var/www/html/"      command: ['/usr/sbin/init']      networks:        nginx-lsb:          ipv4_address: ${web2_addr}  networks:    nginx-lsb:      driver: bridge      ipam:        config:          - subnet: 192.169.0.0/16    // 重新启动composetest项目  docker-compose up -d    

修改nginx.conf配置文件,配置负载均衡

upstream mydocker {    server 192.169.0.2;    server 192.169.0.3;  }    server {    listen 80;    server_name mydocker;    location / {      proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;      proxy_buffering off;      proxy_pass http://mydocker;    }  }    

重新启动nginx-lsb,加载配置文件

docker-composer restart nginx-lsb  

访问 http://主机IP地址:8000,测试主机负载均衡!

提示:现在腾讯云新人点击注册然后实名认证后,可以点此一键领取2860元代金券,然后点此进入腾讯云活动页面参加优惠力度非常大的腾讯云3年和5年时长服务器活动,一次性买多年,免得续费贵,这样就可以获得最大的优惠折扣,省钱。

版权声明:xxxxxxxxx;

原文链接:https://lecms.nxtedu.cn/yunzhuji/131095.html

发表评论:

验证码

管理员

  • 内容1196553
  • 积分0
  • 金币0
关于我们
lecms主程序为免费提供使用,使用者不得将本系统应用于任何形式的非法用途,由此产生的一切法律风险,需由使用者自行承担,与本站和开发者无关。一旦使用lecms,表示您即承认您已阅读、理解并同意受此条款的约束,并遵守所有相应法律和法规。
联系方式
电话:
地址:广东省中山市
Email:admin@qq.com
注册登录
注册帐号
登录帐号

Copyright © 2022 LECMS Inc. 保留所有权利。 Powered by LECMS 3.0.3

页面耗时0.0135秒, 内存占用361.95 KB, 访问数据库18次

  • 我要关灯
    我要开灯
  • 客户电话
    lecms

    工作时间:8:00-18:00

    客服电话

    电子邮件

    admin@qq.com

  • 官方微信

    扫码二维码

    获取最新动态

  • 返回顶部