您好,登錄后才能下訂單哦!
這篇文章主要講解了“在Linux系統(tǒng)下怎么使用Docker以及Weave搭建Nginx反向代理”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“在Linux系統(tǒng)下怎么使用Docker以及Weave搭建Nginx反向代理”吧!
Hi, 今天我們將會學(xué)習(xí)如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/負載均衡服務(wù)器。Weave 可以創(chuàng)建一個虛擬網(wǎng)絡(luò)將 Docker 容器彼此連接在一起,支持跨主機部署及自動發(fā)現(xiàn)。它可以讓我們更加專注于應(yīng)用的開發(fā),而不是基礎(chǔ)架構(gòu)。Weave 提供了一個如此棒的環(huán)境,仿佛它的所有容器都屬于同個網(wǎng)絡(luò),不需要端口/映射/連接等的配置。容器中的應(yīng)用提供的服務(wù)在 weave 網(wǎng)絡(luò)中可以輕易地被外部世界訪問,不論你的容器運行在哪里。在這個教程里我們將會使用 weave 快速并且簡單地將 nginx web 服務(wù)器部署為一個負載均衡器,反向代理一個運行在 Amazon Web Services 里面多個節(jié)點上的 docker 容器中的簡單 php 應(yīng)用。這里我們將會介紹 WeaveDNS,它提供一個不需要改變代碼就可以讓容器利用主機名找到的簡單方式,并且能夠讓其他容器通過主機名連接彼此。
在這篇教程里,我們將使用 nginx 來將負載均衡分配到一個運行 Apache 的容器集合。最簡單輕松的方法就是使用 Weave 來把運行在 ubuntu 上的 docker 容器中的 nginx 配置成負載均衡服務(wù)器。
Docker之weave工具
weave是什么呢?weave創(chuàng)建了一個虛擬網(wǎng)絡(luò),用來連接部署在多臺機器上的docker容器。
下面看看weave的應(yīng)用場景:
應(yīng)用在使用該網(wǎng)絡(luò)的時候就像所有的容器都在同一個交換機網(wǎng)絡(luò)下一樣,不需要配置端口映射、連接等等,容器中的應(yīng)用提供的服務(wù)在weaver網(wǎng)絡(luò)中可以被外部世界訪問,不論你的容器運行在哪里。同樣的,已經(jīng)存在的系統(tǒng)應(yīng)用也可以暴露給容器中的應(yīng)用來調(diào)用,而不用擔(dān)心內(nèi)部應(yīng)用運行的位置。
weave可以穿透防火墻,流量是被加密的,允許主機連接通過一個不被信任的網(wǎng)絡(luò),使用weave你可以方便的部署多個容器在不同的地方運行
假如你有一個docker應(yīng)用運行在兩臺不同的主機HOST1和HOST2上面,也就是我們要在這兩臺主機上各部署一個相同類型的docker應(yīng)用。
在HOST1上面:啟動weave
代碼如下:
#這一步先啟動weave路由,需要在每一臺HOST上都啟動
weave launch
#啟動一個容器,在命令行設(shè)置了一個ip,weave run調(diào)用docker run -d,因此我們可以使用這種辦法啟動一個容器,同理存在weave start命令,它是調(diào)用docker start命令啟動已經(jīng)存在的容器,如果我們在該HOST1上有多個容器要部署,則繼續(xù)執(zhí)行第二行的命令即可,只要保證容器設(shè)置的ip沒有沖突即可,同一個網(wǎng)段的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會自動的連接,在他們的服務(wù)啟動后,我們也可以告訴weave連接多個同行,你可以提供多個ip地址,用空格分開即可。
在HOST1上面:
代碼如下:
docker attach $ssh
在HOST2上面:
代碼如下:
docker attach $ssh
然后兩者進行互ping,會發(fā)現(xiàn)網(wǎng)絡(luò)是通的
下面來看一下具體的部署過程
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
在克隆完倉庫之后,我們執(zhí)行下面的腳本,這個腳本將會部署兩個 t1.micro 實例,每個實例中都是 ubuntu 作為操作系統(tǒng)并用 weave 跑著 docker 容器。
代碼如下:
$ sudo ./demo-aws-setup.sh
在這里,我們將會在以后用到這些實例的 IP 地址。這些地址儲存在一個 weavedemo.env 文件中,這個文件創(chuàng)建于執(zhí)行 demo-aws-setup.sh 腳本期間。為了獲取這些 IP 地址,我們需要執(zhí)行下面的命令,命令輸出類似下面的信息。
代碼如下:
$ 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 會為我們的實例動態(tài)地分配 IP 地址。
我們在 bash 下執(zhí)行下面的命令使環(huán)境變量生效。
代碼如下:
. ./weavedemo.env
2. 啟動 Weave 和 WeaveDNS
在安裝完實例之后,我們將會在每臺主機上啟動 weave 以及 weavedns。Weave 以及 weavedns 使得我們能夠輕易地將容器部署到一個全新的基礎(chǔ)架構(gòu)以及配置中, 不需要改變代碼,也不需要去理解像 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. 啟動應(yīng)用容器
現(xiàn)在,我們準備跨兩臺主機啟動六個容器,這兩臺主機都用 Apache2 Web 服務(wù)實例跑著簡單的 php 網(wǎng)站。為了在第一個 Apache2 Web 服務(wù)器實例跑三個容器, 我們將會使用下面的命令。
代碼如下:
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 容器
在應(yīng)用容器如預(yù)期的運行后,我們將會啟動 nginx 容器,它將會在六個應(yīng)用容器服務(wù)之間輪詢并提供反向代理或者負載均衡。 為了啟動 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 服務(wù)器。
5. 測試負載均衡服務(wù)器
為了測試我們的負載均衡服務(wù)器是否可以工作,我們執(zhí)行一段可以發(fā)送 http 請求給 nginx 容器的腳本。我們將會發(fā)送6個請求,這樣我們就能看到 nginx 在一次的輪詢中服務(wù)于每臺 web 服務(wù)器之間。
代碼如下:
$ ./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"
}
結(jié)束語
我們最終成功地將 nginx 配置成一個反向代理/負載均衡服務(wù)器,通過使用 weave 以及運行在 AWS(Amazon Web Service)EC2 里面的 ubuntu 服務(wù)器中的 docker。從上面的步驟輸出可以清楚的看到我們已經(jīng)成功地配置了 nginx。我們可以看到請求在一次輪詢中被發(fā)送到6個應(yīng)用容器,這些容器在 Apache2 Web 服務(wù)器中跑著 PHP 應(yīng)用。在這里,我們部署了一個容器化的 PHP 應(yīng)用,使用 nginx 橫跨多臺在 AWS EC2 上的主機而不需要改變代碼,利用 weavedns 使得每個容器連接在一起,只需要主機名就夠了,眼前的這些便捷, 都要歸功于 weave 以及 weavedns。
感謝各位的閱讀,以上就是“在Linux系統(tǒng)下怎么使用Docker以及Weave搭建Nginx反向代理”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對在Linux系統(tǒng)下怎么使用Docker以及Weave搭建Nginx反向代理這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。