Docker 多主機(jī)網(wǎng)絡(luò)通信詳細(xì)介紹
最近做項(xiàng)目是關(guān)于Docker 的網(wǎng)絡(luò)通信,需要多個(gè)主機(jī)進(jìn)行鏈接通信,這里記錄下,以后便于項(xiàng)目開(kāi)發(fā),大家需要的話也可以看下,少走些彎路。
Docker多主機(jī)網(wǎng)絡(luò)通信詳解
Docker支持多主機(jī)網(wǎng)絡(luò)通信功能,可以通過(guò)命令行建立多主機(jī)通信網(wǎng)絡(luò)。本文使用Docker machine和Consul服務(wù)發(fā)現(xiàn)工具來(lái)講解這一點(diǎn)。
前提是需要先安裝Docker工具箱。
1、Docker Multi-Host Networking
作為一個(gè)示例,我們會(huì)在VirtualBox虛擬機(jī)上使用docker machine創(chuàng)建3個(gè)Docker主機(jī)。其中一個(gè)Docker主機(jī)運(yùn)行Consul服務(wù)發(fā)現(xiàn)工具,另外兩個(gè)Docker主機(jī)則通過(guò)第一臺(tái)主機(jī)的Consul服務(wù)發(fā)現(xiàn)容器共享網(wǎng)絡(luò)信息。
Docker容器網(wǎng)絡(luò)部分的相信信息可查看:
https://docs.docker.com/engine/userguide/networking/dockernetworks/
Consul的詳細(xì)信息見(jiàn): https://www.consul.io/
Consul的特性:
1)服務(wù)發(fā)現(xiàn)
Consul使得服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)變得很簡(jiǎn)單
2)故障檢測(cè)
支持對(duì)服務(wù)的健康檢查,防止請(qǐng)求被路由到服務(wù)不可用的主機(jī)上
3)支持多數(shù)據(jù)中心
Consul支持多數(shù)據(jù)中心,無(wú)需復(fù)雜的配置
4)鍵值存儲(chǔ)
Consul使用了鍵值存儲(chǔ)來(lái)支持動(dòng)態(tài)配置等
2、設(shè)置多主機(jī)網(wǎng)絡(luò)
1)創(chuàng)建名為“host1-Consul”的Docker主機(jī)
docker-machine create -d virtualbox host1-Consul
2)在“host1-Consul”主機(jī)上運(yùn)行Consul容器
docker $(docker-machine config host1-Consul) run -d -p "8500:8500" -h"Consul" progrium/Consul -server -bootstrap
3)驗(yàn)證上述容器的運(yùn)行狀態(tài)
docker $(docker-machine config host1-Consul) ps
4)運(yùn)行第二個(gè)Docker主機(jī),并注冊(cè)到前面的Consul容器
docker-machine create -d virtualbox --engine-opt="cluster-store=Consul://$(docker-machine ip host1-Consul):8500" --engine-opt="cluster-advertise=eth1:0" host2
5)運(yùn)行第三個(gè)Docker主機(jī)
docker-machine create -d virtualbox --engine-opt="cluster-store=Consul://$(docker-machine ip host1-Consul):8500" --engine-opt="cluster-advertise=eth1:0" host3
現(xiàn)在,后面兩個(gè)Docker主機(jī)都有默認(rèn)的網(wǎng)絡(luò)配置,且只能用于單個(gè)主機(jī)的通信。
6)要實(shí)現(xiàn)多主機(jī)網(wǎng)絡(luò)通信,還需要在主機(jī)2上創(chuàng)建一個(gè)覆蓋網(wǎng)絡(luò)
docker $(docker-machine config host2) network create -d overlay myapp
7)OK,此時(shí)如果在主機(jī)3上檢查網(wǎng)絡(luò),就可以看到主機(jī)2上創(chuàng)建的覆蓋網(wǎng)絡(luò)。這是因?yàn)橹鳈C(jī)2和3都注冊(cè)到Consul,網(wǎng)絡(luò)信息在所有已注冊(cè)的主機(jī)之間實(shí)現(xiàn)了共享。
docker $(docker-machine config host2) network ls
docker $(docker-machine config host3) network ls
如果是在不同的主機(jī)上運(yùn)行容器,可能就需要使用容器名來(lái)連接它們。我們可以這樣做個(gè)測(cè)試。
在主機(jī)2上運(yùn)行一個(gè)Nginx容器,在主機(jī)3上運(yùn)行一個(gè)busybox容器,通過(guò)busybox容器下載Nginx容器默認(rèn)頁(yè)面來(lái)測(cè)試連接是否正常。
8)在主機(jī)2上運(yùn)行Nginx容器,并指定創(chuàng)建的“myapp”網(wǎng)絡(luò)
docker $(docker-machine config host2) run -itd --name=webfront --net=myapp nginx
9)驗(yàn)證Nginx容器的運(yùn)行
docker $(docker-machine config host2) ps
10)在主機(jī)3上運(yùn)行一個(gè)busybox容器,使用參數(shù)下載主機(jī)2的Nginx容器的默認(rèn)主頁(yè)。
docker $(docker-machine config host3) run -it --rm --net=myapp busybox wget -qO- http://webfront
如果結(jié)果返回的是HTML內(nèi)容的輸出,意味著容器能夠使用之前創(chuàng)建的覆蓋網(wǎng)絡(luò)連接到主機(jī)。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
docker安裝influxdb的詳細(xì)教程(性能測(cè)試)
這篇文章主要介紹了docker安裝influxdb的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Harbor搭建Docker私有倉(cāng)庫(kù)的實(shí)現(xiàn)方法
Harbor是一個(gè)由CNCF托管的開(kāi)源的Docker鏡像倉(cāng)庫(kù)管理工具,我們可以通過(guò)它快速的建立起自己的私有倉(cāng)庫(kù),本文就詳細(xì)的介紹了Harbor搭建Docker私有倉(cāng)庫(kù)的實(shí)現(xiàn)方法,感興趣的可以了解一下2021-06-06
docker安裝RocketMQ的實(shí)現(xiàn)步驟
本文主要介紹了docker安裝RocketMQ的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Docker部署SpringBoot項(xiàng)目的實(shí)現(xiàn)步驟
本文主要介紹了Docker部署SpringBoot項(xiàng)目的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2007-02-02
滾動(dòng) docker 中的 nginx 日志思路詳解
Nginx 自己沒(méi)有處理日志的滾動(dòng)問(wèn)題,本文筆者介紹如何滾動(dòng)運(yùn)行在 docker 中的 nginx 日志文件,感興趣的朋友一起看看吧2018-08-08

