在個(gè)人的小項(xiàng)目或者測試環(huán)境中,配置反向代理顯得十分繁瑣,而借助 Nginx-proxy 的鏡像,即使是小白,也能快速實(shí)現(xiàn)域名轉(zhuǎn)發(fā)。

1.域名、IP自動轉(zhuǎn)發(fā)

在開始之前,首先黑進(jìn)了自家的路由器,將某個(gè)域名(甚至不存在),如 dotnet1.nginx-test.com 和 dotnet2.nginx-test.com 指向了局域網(wǎng)內(nèi) IP 為 "192.168.9.10" 的機(jī)器上(hosts、iptable等方式)。
接著,假設(shè)你已經(jīng)安裝了 Docker的基礎(chǔ)上,只需再安裝 docker-compose。如果你對這一切一無了解的話,可以使用daocloud提供的的 一鍵腳本。
回到本文討論的重點(diǎn),在不寫任何 Nginx 配置的前提下,讓相關(guān)的域名指向?qū)?yīng)的應(yīng)用。編寫如下的 docker-compose.yml:

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

  dotnet1:
    image: daocloud.io/koukouge/zhs:master
    container_name: dotnet1
    environment:
      - VIRTUAL_PORT=80 #監(jiān)聽的端口
      - VIRTUAL_HOST=dotnet1.nginx-test.com,192.168.9.10  #監(jiān)聽的地址

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

只需要一句 docker-compose up 就能啟動對應(yīng)的應(yīng)用,實(shí)現(xiàn)自動轉(zhuǎn)發(fā)。


 

2.零停機(jī)重載域名、IP

在上一節(jié)中,我們已經(jīng)是在后臺啟動了 nginx-proxy 和 dotnet1 的應(yīng)用,如果我們在新增或者修改原有的域名呢?假設(shè)在原有的 docker-compose.yml 增加一個(gè) 2048 的鏡像:

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

simple:
    image: alexwhen/docker-2048
    container_name: simple
    environment:      - VIRTUAL_PORT=80
      - VIRTUAL_HOST=dotnet2.nginx-test.com

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

這種情況下,重啟整個(gè) docker-compose 顯然不是最佳的方式。為了不影響已經(jīng)運(yùn)行中的應(yīng)用,只需對新增或者需要修改的應(yīng)用執(zhí)行如下命令:

sudo docker-compose up --build --no-deps -d simple # simple 為應(yīng)用的名稱


3. Let's Encrypt 免費(fèi)證書

隨著網(wǎng)絡(luò)安全意識的提高,Https 逐漸成為互聯(lián)網(wǎng)的標(biāo)配。特別是在國內(nèi)的網(wǎng)絡(luò)環(huán)境中,網(wǎng)絡(luò)劫持現(xiàn)象愈演愈烈。即使是個(gè)人的小博客網(wǎng)站,博主并不接入廣告的情況下,仍然可以無意中發(fā)現(xiàn)博客中居然有 "澳門在線賭場" 的廣告,這時(shí)候使用 SSL 證書就顯得十分必要了。
Let's Encrypt 是一家致力于推廣 Https 技術(shù)的公益組織,其免費(fèi)證書得到了幾乎所有瀏覽器的支持,是目前最為流行、也是最大的免費(fèi)證書提供者。
同樣的,在我們之前基礎(chǔ)上,我們同樣可以實(shí)現(xiàn)對多個(gè)域名證書的傻瓜化配置。
在原有的基礎(chǔ)下,我們將第一節(jié)中的 docker-compose.yml 修改為:

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

version: '2'services:
  nginx:
    restart: always
    image: nginx
    container_name: nginx
    ports:    - 80:80
    - 443:443
    volumes:    - /etc/nginx/conf.d    - /etc/nginx/vhost.d    - /usr/share/nginx/html    - /etc/nginx/certs:/etc/nginx/certs:ro

  dotnet1:
    image: daocloud.io/koukouge/zhs:master
    container_name: dotnet1
    environment:      - VIRTUAL_PORT=80 #監(jiān)聽的端口      - VIRTUAL_HOST=dotnet1.nginx-test.com  #監(jiān)聽的地址      - LETSENCRYPT_HOST=dotnet1.nginx-test.com #證書的域名      - LETSENCRYPT_EMAIL=someone@simple.com #證書所有者的郵箱,快過期時(shí)會提醒

  nginx-gen:
    restart: always
    image: jwilder/docker-gen
    container_name: nginx-gen
    volumes:    - /var/run/docker.sock:/tmp/docker.sock:ro    - /etc/nginx/nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro
    volumes_from:    - nginx
    entrypoint: /usr/local/bin/docker-gen -notify-sighup nginx -watch -wait 5s:30s      /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf

  letsencrypt-nginx-proxy-companion:
    restart: always
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt-nginx-proxy-companion
    volumes_from:    - nginx
    volumes:    - /var/run/docker.sock:/var/run/docker.sock:ro    - /etc/nginx/certs:/etc/nginx/certs:rw
    environment:    - NGINX_DOCKER_GEN_CONTAINER=nginx-gen

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

先別急著啟動,如果已經(jīng)啟動了就會發(fā)現(xiàn) nginx-gen應(yīng)用 缺失了nginx.tmpl 文件。所以我們需要將其下載并放置在相應(yīng)的位置:

curl https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl > /etc/nginx/nginx.tmpl

最后,只要一聲令下,就可以發(fā)現(xiàn)網(wǎng)站已經(jīng)成功多了一個(gè)綠色的小鎖。


 

4.結(jié)語

本文主要是參考 https://github.com/fatk/docker-letsencrypt-nginx-proxy-companion-examples

本文僅僅是針對新手提供的教程,如果你有其他好的想法或者用法,可以在評論區(qū)點(diǎn)評。

http://www.cnblogs.com/chenug/p/6916639.html