現在的維運人員實在太幸福了,甚至是開發人員也是,在以前必須要設置一堆東西才能做到 Reverse Proxy,現在就有非常簡易且自動的方式完成,這邊就要介紹一下,如何讓 docker 可以自動做到 Reverse Proxy。
相關細節請參考下面連結:
附上 docker compose 設定方式
docker compose
web_01:
container_name: hmi-web-01
image: node:4
command: "/bin/bash -l -c 'npm start'"
expose:
- "3000"
working_dir: /app
volumes:
- ./:/app
environment:
- "VIRTUAL_HOST=192.168.99.119"
- "APP_NAME=hmi-web-01"
restart: always
web_02:
container_name: hmi-web-02
image: node:4
command: "/bin/bash -l -c 'npm start'"
expose:
- "3000"
working_dir: /app
volumes:
- ./:/app
environment:
- "VIRTUAL_HOST=192.168.99.119"
- "APP_NAME=hmi-web-02"
restart: always
nginx-proxy:
container_name: nginx-proxy
image: jwilder/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock
restart: always
其中,跟一般使用 docker ports 的設置不同,我們只要讓 docker container expose port 就好,nginx-proxy 將會自動解析 docker container 的相關資訊進行 port forwarding,而每個實體 server 只要設置環境變數 VIRTUAL_HOST=192.168.99.119
將會自動記行 mapping,就是這麼簡單。
運行範例
docker-compose up -d web-01
docker-compose up -d web-02
docker-compose up -d nginx-proxy
如此就可以自動完成相關設置
執行驗證
我在 sample 中輸出 server 的識別,就如同 docker compose 中所設置,可以看到,我對同一個 ip 進行 reload 將會顯示不同名稱。
如此,一旦其中一個 docker 掛掉,系統將會保持 online,我們只要在 restart 就可以確保系統不會斷線。
實在是太棒了!感謝撰寫這套件的先進!
結論
還記得去年(2015)葉大在 JCConf 中所分享的,
Immutable infrastructure:觀念與實作
其中一張簡報
這件事情,將可以更輕易地做到,一旦有了第一個循環,接著就是不停個改善優化,盡可能地做到長生不敗,與大家分享!
同場加映
Raspberry Pi 用 nginx-proxy
參考資料
http://www.informaticslab.co.uk
/infrastructure/2015/12/09/raspberry-pi-docker-cluster.html
http://jasonwilder.com/blog/2014/03
/25/automated-nginx-reverse-proxy-for-docker/