1. 程式人生 > 其它 >docker nginx 重新載入配置檔案_使用Docker Compose 實現nginx負載均衡

docker nginx 重新載入配置檔案_使用Docker Compose 實現nginx負載均衡

技術標籤:docker 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/compo...

繼續上一篇《使用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/compo...

// 還是在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,測試伺服器負載均衡!

以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務程式碼寫多了沒有方向感,不知道該從那裡入手去提升,對此我整理了一些資料,包括但不限於:分散式架構、高可擴充套件、高效能、高併發、伺服器效能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell指令碼、Docker、微服務、Nginx等多個知識點高階進階乾貨需要的可以免費分享給大家 ,需要請戳這裡連結 或 者關注咱們下面的知乎專欄
PHP架構師圈子​zhuanlan.zhihu.com 704c4be077263cdefb0eaec792f7c8f4.png