在Linux系統下使用Docker以及Weave搭建Nginx反向 Proxy

來源:互聯網
上載者:User

   Hi, 今天我們將會學習如何使用 Weave 和 Docker 搭建 Nginx 的反向 Proxy/負載平衡伺服器。Weave 可以建立一個虛擬網路將 Docker 容器彼此串連在一起,支援跨主機部署及自動探索。它可以讓我們更加專註於應用的開發,而不是基礎架構。Weave 提供了一個如此棒的環境,彷彿它的所有容器都屬於同個網路,不需要連接埠/映射/串連等的配置。容器中的應用提供的服務在 weave 網路中可以輕易地被外部世界訪問,不論你的容器運行在哪裡。在這個教程裡我們將會使用 weave 快速並且簡單地將 nginx web 伺服器部署為一個負載平衡器,反向 Proxy一個運行在 Amazon Web Services 裡面多個節點上的 docker 容器中的簡單 php 應用。這裡我們將會介紹 WeaveDNS,它提供一個不需要改變代碼就可以讓容器利用主機名稱找到的簡單方式,並且能夠讓其他容器通過主機名稱串連彼此。

  在這篇教程裡,我們將使用 nginx 來將負載平衡分配到一個運行 Apache 的容器集合。最簡單輕鬆的方法就是使用 Weave 來把運行在 ubuntu 上的 docker 容器中的 nginx 配置成負載平衡伺服器。

  Docker之weave工具

  weave是什麼呢?weave建立了一個虛擬網路,用來串連部署在多台機器上的docker容器。

  下面看看weave的應用情境:

  應用在使用該網路的時候就像所有的容器都在同一個交換器網路下一樣,不需要配置連接埠映射、串連等等,容器中的應用提供的服務在weaver網路中可以被外部世界訪問,不論你的容器運行在哪裡。同樣的,已經存在的系統應用也可以暴露給容器中的應用來調用,而不用擔心內部應用啟動並執行位置。

  weave可以穿透防火牆,流量是被加密的,允許主機串連通過一個不被信任的網路,使用weave你可以方便的部署多個容器在不同的地方運行

  假如你有一個docker應用運行在兩台不同的主機HOST1和HOST2上面,也就是我們要在這兩台主機上各部署一個相同類型的docker應用。

  在HOST1上面:啟動weave

  代碼如下:

  #這一步先啟動weave路由,需要在每一台HOST上都啟動

  weave launch

  #啟動一個容器,在命令列設定了一個ip,weave run調用docker run -d,因此我們可以使用這種辦法啟動一個容器,同理存在weave start命令,它是調用docker start命令啟動已經存在的容器,如果我們在該HOST1上有多個容器要部署,則繼續執行第二行的命令即可,只要保證容器設定的ip沒有衝突即可,同一個網段的ip可以到處使用

  ssh=$(weave run 10.1.1.1/24 -t -i ubuntu)

  在HOST2上面:啟動weave

  代碼如下:

  #這一步有點不一樣,我們在HOST2上告訴weave他有一個同行在HOST1上,可以指定ip或者主機名稱,還可以指定連接埠。如果在HOST1和HOST2直接有防火牆,要確保tcp/udp的6783連接埠被開啟

  weave launch $HOST1

  #和第一步中不同的地方在於,配置的IP不一樣

  ssh=$(weave run 10.1.1.2/24 -t -i ubuntu)

  我們也可以告訴HOST1去串連HOST2,或者兩者都告訴他們,這是沒有任何問題的,weave會自動的串連,在他們的服務啟動後,我們也可以告訴weave串連多個同行,你可以提供多個ip地址,用空格分開即可。

  在HOST1上面:

  代碼如下:

  docker attach $ssh

  在HOST2上面:

  代碼如下:

  docker attach $ssh

  然後兩者進行互ping,會發現網路是通的

  下面來看一下具體的部署過程

  1. 搭建 AWS 執行個體

  首先,我們需要搭建 Amzaon Web Service 執行個體,這樣才能在 ubuntu 下用 weave 跑 docker 容器。我們將會使用AWS 命令列 來搭建和配置兩個 AWS EC2 執行個體。在這裡,我們使用最小的可用執行個體,t1.micro。我們需要一個有效Amazon Web Services 賬戶使用 AWS 命令列介面來搭建和配置。我們先在 AWS 命令列介面下使用下面的命令將 github 上的 weave 倉庫複製下來。

  代碼如下:

  $ git clone https://github.com/weaveworks/guides

  $ cd weave-gs/aws-nginx-ubuntu-simple

  在複製完倉庫之後,我們執行下面的指令碼,這個指令碼將會部署兩個 t1.micro 執行個體,每個執行個體中都是 ubuntu 作為作業系統並用 weave 跑著 docker 容器。

  複製代碼

  代碼如下:

  $ sudo ./demo-aws-setup.sh

  在這裡,我們將會在以後用到這些執行個體的 IP 位址。這些地址儲存在一個 weavedemo.env 檔案中,這個檔案建立於執行 demo-aws-setup.sh 指令碼期間。為了擷取這些 IP 位址,我們需要執行下面的命令,命令輸出類似下面的資訊。

  代碼如下:

  $ cat weavedemo.env

  export WEAVE_AWS_DEMO_HOST1=52.26.175.175

  export WEAVE_AWS_DEMO_HOST2=52.26.83.141

  export WEAVE_AWS_DEMO_HOSTCOUNT=2

  export WEAVE_AWS_DEMO_HOSTS=(52.26.175.175 52.26.83.141)

  請注意這些不是固定的 IP 位址,AWS 會為我們的執行個體動態地分配 IP 位址。

  我們在 bash 下執行下面的命令使環境變數生效。

  代碼如下:

  . ./weavedemo.env

  2. 啟動 Weave 和 WeaveDNS

  在安裝完執行個體之後,我們將會在每台主機上啟動 weave 以及 weavedns。Weave 以及 weavedns 使得我們能夠輕易地將容器部署到一個全新的基礎架構以及配置中, 不需要改變代碼,也不需要去理解像 Ambassador 容器以及 Link 機制之類的概念。下面是在第一台主機上啟動 weave 以及 weavedns 的命令。

  代碼如下:

  ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST1

  $ sudo weave launch

  $ sudo weave launch-dns 10.2.1.1/24

  下一步,我也準備在第二台主機上啟動 weave 以及 weavedns。

  代碼如下:

  ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST2

  $ sudo weave launch $WEAVE_AWS_DEMO_HOST1

  $ sudo weave launch-dns 10.2.1.2/24

  3. 啟動應用程式容器

  現在,我們準備跨兩台主機啟動六個容器,這兩台主機都用 Apache2 Web 服務執行個體跑著簡單的 php 網站。為了在第一個 Apache2 Web 伺服器執行個體跑三個容器, 我們將會使用下面的命令。

  複製代碼

  代碼如下:

  ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST1

  $ sudo weave run --with-dns 10.3.1.1/24 -h ws1.weave.local fintanr/weave-gs-nginx-apache

  $ sudo weave run --with-dns 10.3.1.2/24 -h ws2.weave.local fintanr/weave-gs-nginx-apache

  $ sudo weave run --with-dns 10.3.1.3/24 -h ws3.weave.local fintanr/weave-gs-nginx-apache

  在那之後,我們將會在第二個執行個體上啟動另外三個容器,請使用下面的命令。

  代碼如下:

  ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST2

  $ sudo weave run --with-dns 10.3.1.4/24 -h ws4.weave.local fintanr/weave-gs-nginx-apache

  $ sudo weave run --with-dns 10.3.1.5/24 -h ws5.weave.local fintanr/weave-gs-nginx-apache

  $ sudo weave run --with-dns 10.3.1.6/24 -h ws6.weave.local fintanr/weave-gs-nginx-apache

  注意: 在這裡,--with-dns 選項告訴容器使用 weavedns 來解析主機名稱,-h x.weave.local 則使得 weavedns 能夠解析該主機。

  4. 啟動 Nginx 容器

  在應用程式容器如預期的運行後,我們將會啟動 nginx 容器,它將會在六個應用程式容器服務之間輪詢並提供反向 Proxy或者負載平衡。 為了啟動 nginx 容器,請使用下面的命令。

  複製代碼

  代碼如下:

  ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST1

  $ sudo weave run --with-dns 10.3.1.7/24 -ti -h nginx.weave.local -d -p 80:80 fintanr/weave-gs-nginx-simple

  因此,我們的 nginx 容器在 $WEAVEAWSDEMO_HOST1 上公開地暴露成為一個 http 伺服器。

  5. 測試負載平衡伺服器

  為了測試我們的負載平衡伺服器是否可以工作,我們執行一段可以發送 http 請求給 nginx 容器的指令碼。我們將會發送6個請求,這樣我們就能看到 nginx 在一次的輪詢中服務於每台 網頁伺服器之間。

  代碼如下:

  $ ./access-aws-hosts.sh

  {

  "message" : "Hello Weave - nginx example",

  "hostname" : "ws1.weave.local",

  "date" : "2015-06-26 12:24:23"

  }

  {

  "message" : "Hello Weave - nginx example",

  "hostname" : "ws2.weave.local",

  "date" : "2015-06-26 12:24:23"

  }

  {

  "message" : "Hello Weave - nginx example",

  "hostname" : "ws3.weave.local",

  "date" : "2015-06-26 12:24:23"

  }

  {

  "message" : "Hello Weave - nginx example",

  "hostname" : "ws4.weave.local",

  "date" : "2015-06-26 12:24:23"

  }

  {

  "message" : "Hello Weave - nginx example",

  "hostname" : "ws5.weave.local",

  "date" : "2015-06-26 12:24:23"

  }

  {

  "message" : "Hello Weave - nginx example",

  "hostname" : "ws6.weave.local",

  "date" : "2015-06-26 12:24:23"

  }

  結束語

  我們最終成功地將 nginx 配置成一個反向 Proxy/負載平衡伺服器,通過使用 weave 以及運行在 AWS(Amazon Web Service)EC2 裡面的 ubuntu 伺服器中的 docker。從上面的步驟輸出可以清楚的看到我們已經成功地配置了 nginx。我們可以看到請求在一次輪詢中被發送到6個應用程式容器,這些容器在 Apache2 Web 服務器中跑著 PHP 應用。在這裡,我們部署了一個容器化的 PHP 應用,使用 nginx 橫跨多台在 AWS EC2 上的主機而不需要改變代碼,利用 weavedns 使得每個容器串連在一起,只需要主機名稱就夠了,眼前的這些便捷, 都要歸功於 weave 以及 weavedns。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.