千家信息网

如何使用Docker Compose实现nginx负载均衡

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关如何使用Docker Compose实现nginx负载均衡,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。以Docker的网络管理,容器的
千家信息网最后更新 2026年11月03日如何使用Docker Compose实现nginx负载均衡

这篇文章将为大家详细讲解有关如何使用Docker Compose实现nginx负载均衡,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

以Docker的网络管理,容器的IP设置为基础知识实现Nginx负载均衡

查看所有docker网络

docker network ls/*NETWORK ID     NAME         DRIVER       SCOPEb832b168ca9a    bridge        bridge       local373be82d3a6a    composetest_default  bridge       locala360425082c4    host         host        local154f600f0e90    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.2networks:  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 psdocker network ls/*NETWORK ID     NAME          DRIVER       SCOPEb832b168ca9a    bridge         bridge       local373be82d3a6a    composetest_default   bridge       localde6f5b8df1c8    composetest_nginx-lsb  bridge       locala360425082c4    host          host        local154f600f0e90    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": "5a36e602a5364ee9ad06e9816d09e3966d56ebf06b9394ebc25b8bcee9546607",        "MacAddress": "02:42:c0:a9:00:03",        "IPv4Address": "192.169.0.3/16",        "IPv6Address": ""      }    },...*/

使用 env_file环境文件:

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

官方文档地址:https://docs.docker.com/compose/compose-file/#env_file

// 还是在composetest目录中定义个 .env文件,用来存放变量web1_addr=192.169.0.2web2_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_lsbweb1_addr=192.169.0.2web2_addr=192.169.0.3nginx_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,测试服务器负载均衡!

关于"如何使用Docker Compose实现nginx负载均衡"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

容器 网络 文件 均衡 变量 项目 地址 服务器 详情 服务 配置 目录 篇文章 文档 文章 更多 知识 上一 不错 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网黑科技 新华互联网科技学校 关于新基建和互联网科技 中资互联网科技 互联网科技的发展 互联网金融 金融科技 成都互联网科技公司 湖北码尼互联网科技有限公司电话 知域互联网科技有限公司大骗子 互联网科技扶贫时间 亳州好赞互联网科技有限公司 996高科技互联网公司 特约风豹互联网科技为什么扣费 世界互联网领先科技成果获奖 恒生互联网科技业指数调整周期 伊宁互联网科技做什么的 山东有哪些互联网科技公司 中国互联网有什么科技 富国互联网金融科技混合基金 互联网科技快讯热点 深圳九邦互联网科技有限公司 互联网金融 科技 互联网金融科技平台 互联网前沿科技 银川新华互联网科技职业技术培训学校图片 互联网科技公司有风险吗 消费医药和互联网科技 黑科技 体验场景 互联网大会 广州梦谷互联网科技有限公司领导 黑龙江互联网科技公司
0