• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    使用Docker Compose 实现nginx负载均衡的方法步骤

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

    查看所有docker网络

    docker network ls
    
    /*
    NETWORK ID     NAME         DRIVER       SCOPE
    b832b168ca9a    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
    b832b168ca9a    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": "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.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,测试服务器负载均衡!

    注意:上一篇已经在两台httpd服务器上放置了不同的web文件

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

    上一篇:Windows server 2016 安装oracle的教程图解
    下一篇:非常实用的Tomcat启动脚本实现方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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