中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Docker Compose實現nginx負載均衡

發布時間:2021-05-21 10:20:02 來源:億速云 閱讀:254 作者:小新 欄目:服務器

這篇文章將為大家詳細講解有關如何使用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,測試服務器負載均衡!

關于“如何使用Docker Compose實現nginx負載均衡”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

四子王旗| 泰州市| 诏安县| 措美县| 千阳县| 昌邑市| 九寨沟县| 深圳市| 卢龙县| 长宁县| 江口县| 长海县| 富宁县| 虎林市| 扶绥县| 班玛县| 历史| 聊城市| 和平县| 富蕴县| 泽州县| 舟山市| 镇江市| 公主岭市| 沙洋县| 南昌市| 兴化市| 锡林浩特市| 将乐县| 梅河口市| 廊坊市| 达孜县| 定陶县| 宿迁市| 井陉县| 巴中市| 光山县| 曲沃县| 陆川县| 隆林| 蕲春县|