如何建立 Load Balance 環境

上一篇主要是練習如何將自己開發的網站,放到 docker 裡面,並且透過 dockerfile 將網站建立起來

接下來要完成的目標是,希望能夠利用 docker 的特性,佈署多個實體,並透過 nginx 實作反向代理及負載平衡

docker-compose file

先貼一下完整的 docker-compose 檔案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
version: "3"

services:
nginx:
image: nginx
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- web1
- web2
ports:
- 8888:80
web1:
build:
context: .
dockerfile: build/build-image.dockerfile
args:
project_name: $project_name
ports:
- "8001:80"
web2:
build:
context: .
dockerfile: build/build-image.dockerfile
args:
project_name: $project_name
ports:
- "8002:80"

指定網站的建構檔案

因為先前的練習已經有完成一個網站的 dockerfile 了,在這邊就直接拿這個檔案來用,因此在build的部分需要指定 dockerfile 的路徑

而由於之前我們的 dockerfile 需要指定專案名稱才能夠建立,所以在這邊也透過arg傳入參數,此處的參數$project_name實際上是吃專案目錄下.env檔案的內容,另外 port 的部分,加上這一段只是為了讓網站的 80 port 可以掛載到 host 的 port 方便測試而已,實際上可以不要加

.env的檔案內容如下,就是直接指定一對 key-value

1
project_name=aspMVC

設定 nginx 的建構步驟

此處其實只有兩個重點,第一個將 host 的 8888 port 對應到 nginx 的 80 port,第二個就是掛載 nginx 的設定檔,這個是為了等等方便我們調整設定

建立容器

透過docker-compose up -d指令執行我們設定好的建構檔案
沒有意外的話,應該可以看到容器被正確建立起來,但還需要調整 nginx 的設定檔,才能夠讓網站被看到

查詢容器的 IP

先找到容器的 id

再透過 docker inspect <容器 id>查看資訊,找到 networks 底下的 IP 就是了

設定 nginx 的反向代理

重新讀取 nginx 設定

測試網站

Sample Code

Github