最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker跨主機(jī)網(wǎng)絡(luò)(overlay)的實(shí)現(xiàn)

 更新時(shí)間:2019年12月18日 14:32:54   作者:mb5cd21e691f31a  
這篇文章主要介紹了Docker跨主機(jī)網(wǎng)絡(luò)(overlay)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、Docker 跨主機(jī)通信

Docker跨主機(jī)網(wǎng)絡(luò)方案包括:

docker 原生的 overlay 和 macvlan。
第三方方案:常用的包括 flannel、weave 和 calico。
docker 通過 libnetwork 以及 CNM 將上述各種方案與docker集成在一起。

libnetwork 是 docker 容器網(wǎng)絡(luò)庫,最核心的內(nèi)容是其定義的 Container Network Model (CNM),這個(gè)模型對容器網(wǎng)絡(luò)進(jìn)行了抽象,由以下三類組件組成:

1.1 Sandbox
Sandbox 是容器的網(wǎng)絡(luò)棧,包含容器的 interface、路由表和 DNS 設(shè)置。 Linux Network Namespace 是 Sandbox 的標(biāo)準(zhǔn)實(shí)現(xiàn)。Sandbox 可以包含來自不同 Network 的 Endpoint。也就是說Sandbox將一個(gè)容器與另一個(gè)容器通過Namespace進(jìn)行隔離,一個(gè)容器包含一個(gè)sandbox,每一個(gè)sandbox可以有多個(gè)Endpoint隸屬于不同的網(wǎng)絡(luò)。

1.2 Endpoint
Endpoint 的作用是將 Sandbox 接入 Network。Endpoint 的典型實(shí)現(xiàn)是 veth pair。一個(gè) Endpoint 只能屬于一個(gè)網(wǎng)絡(luò),也只能屬于一個(gè) Sandbox。

1.3 Network
Network 包含一組 Endpoint,同一 Network 的 Endpoint 可以直接通信。Network 的實(shí)現(xiàn)可以是 Linux Bridge、VLAN 等。


Docker網(wǎng)絡(luò)架構(gòu)

圖片截至CLOUDMAN博客。

libnetwork下包含上述原生的driver以及其他第三方driver。
none、bridge網(wǎng)絡(luò)前面已經(jīng)介紹。bridge就是網(wǎng)橋,虛擬交換機(jī),通過veth連接其與sandbox。

二、Docker overlay 網(wǎng)絡(luò)

2.1 啟動(dòng) key-value 數(shù)據(jù)庫 Consul

Docerk overlay 網(wǎng)絡(luò)需要一個(gè) key-value 數(shù)據(jù)庫用于保存網(wǎng)絡(luò)狀態(tài)信息,包括 Network、Endpoint、IP 等。Consul、Etcd 和 ZooKeeper 都是 Docker 支持的 key-vlaue 軟件。

consul是一種key-value數(shù)據(jù)庫,可以用它存儲(chǔ)系統(tǒng)的狀態(tài)信息等,當(dāng)然這里我們并不需要寫代碼,只需要安裝consul,之后docker會(huì)自動(dòng)進(jìn)行狀態(tài)存儲(chǔ)等。最簡單的安裝consul數(shù)據(jù)庫的方法是直接使用 docker 運(yùn)行 consul 容器。

docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

啟動(dòng)后可以通過 host ip的8500端口查看consul服務(wù)。

為了讓 consul 發(fā)現(xiàn)各個(gè) docker 主機(jī)節(jié)點(diǎn),需要在各個(gè)節(jié)點(diǎn)上進(jìn)行配置。修改各個(gè)節(jié)點(diǎn) docker daemon 的配置文件/etc/systemd/system/docker.service。在 ExecStart 最后添加

--cluster-store=consul://<consul_ip>:8500 --cluster-advertise=ens3:2376
其中 <consul_ip> 表示運(yùn)行 consul 容器的節(jié)點(diǎn)IP。ens3為當(dāng)前節(jié)點(diǎn)的ip地址對應(yīng)的網(wǎng)卡,也可以直接填寫ip地址。

以上是單機(jī)版 consul 的安裝方法,建議采用集群模式,集群模式安裝方式見https://www.consul.io/intro/getting-started/join.html。

2.2 創(chuàng)建 overlay 網(wǎng)絡(luò)

創(chuàng)建 overlay 網(wǎng)絡(luò)與之前創(chuàng)建 bridge 網(wǎng)絡(luò)基本相同,唯一不同的是將-d參數(shù)設(shè)置為overlay。如下:

docker network create -d overlay ov_net2

docker network create -d overlay ov_net3 --subnet 172.19.0.0/24 --gateway 172.19.0.1

只需要在一個(gè)節(jié)點(diǎn)中進(jìn)行上述創(chuàng)建過程,其他節(jié)點(diǎn)自動(dòng)會(huì)識(shí)別到該網(wǎng)絡(luò),原因正是在于consul的服務(wù)發(fā)現(xiàn)功能。

之后創(chuàng)建容器的時(shí)候只需要指定--network參數(shù)為ov_net2即可。

docker run --network ov_net2 busybox

這樣即使在不同的主機(jī)上使用同一 overlay 網(wǎng)絡(luò)創(chuàng)建的容器,相互之間也能夠直接訪問。

2.3 overlay 網(wǎng)絡(luò)原理

再創(chuàng)建完一個(gè)overlay網(wǎng)絡(luò)之后,通過docker network ls可以看到網(wǎng)絡(luò)中不僅多了一個(gè)我們創(chuàng)建的 ov_net2 (類型為overlay、scope為global),還能看到一個(gè)名為 docker_gwbridge (類型為bridge、scope為local)。這其實(shí)就是 overlay 網(wǎng)絡(luò)的工作原理所在。

通過brctl show可以看出,每創(chuàng)建一個(gè)網(wǎng)絡(luò)類型為overlay的容器,則docker_gwbridge下都會(huì)掛載一個(gè)vethxxx,這說明確實(shí)overlay容器是通過此網(wǎng)橋進(jìn)行對外連接的。

簡單的說 overlay 網(wǎng)絡(luò)數(shù)據(jù)還是從 bridge 網(wǎng)絡(luò)docker_gwbridge出去的,但是由于consul的作用(記錄了overlay網(wǎng)絡(luò)的endpoint、sandbox、network等信息),使得docker知道了此網(wǎng)絡(luò)是 overlay 類型的,這樣此overlay網(wǎng)絡(luò)下的不同主機(jī)之間就能夠相互訪問,但其實(shí)出口還是在docker_gwbridge網(wǎng)橋。

none、bridge網(wǎng)絡(luò)前面已經(jīng)介紹。bridge就是網(wǎng)橋,虛擬交換機(jī),通過veth連接其與sandbox。

三,讓外網(wǎng)能否訪問容器的端口映射方法:

[root@localhost ~]# ss -lnt
//查看一下套接字(IP地址和端口)

1)手動(dòng)指定端口映射關(guān)系

[root@localhost ~]# docker pull nginx

[root@localhost ~]# docker pull busybox

[root@localhost ~]# docker run -itd nginx:latest
//不加任何參數(shù)開啟一臺(tái)nginx虛擬機(jī)
[root@localhost ~]# docker ps
//查看容器信息

 [root@localhost ~]# docker inspect  vigorous_shannon
//查看容器詳細(xì)信息(現(xiàn)在看IP)

[root@localhost ~]# curl 172.17.0.2

[root@localhost ~]# docker run -itd --name web1 -p 90:80 nginx:latest
//開啟一臺(tái)虛擬機(jī)指定鏈接端口

第二臺(tái)訪問

[root@localhost ~]# curl 192.168.1.11:90

2)從宿主機(jī)隨機(jī)映射端口到容器。

[root@localhost ~]# docker run -itd --name web2 -p 80 nginx:latest
//開啟一臺(tái)虛擬機(jī)隨機(jī)鏈接端口
[root@localhost ~]# docker ps


第二臺(tái)訪問

[root@localhost ~]# curl 192.168.1.11:32768

3)從宿主機(jī)隨機(jī)映射端口到容器,容器內(nèi)所有暴露端口,都會(huì)一一映射。

[root@localhost ~]# docker run -itd --name web3 -P nginx:latest
//從宿主機(jī)隨機(jī)映射端口到容器,容器內(nèi)所有暴露端口,都會(huì)一一映射
[root@localhost ~]# docker ps

第二臺(tái)訪問

[root@localhost ~]# curl 192.168.1.11:32769

四,Join容器:container(共享網(wǎng)絡(luò)協(xié)議棧)

容器和容器之間。

[root@localhost ~]# docker run -itd --name web5  busybox:latest
//基于busybox開啟一臺(tái)虛擬機(jī)
[root@localhost ~]# docker inspect web5

[root@localhost ~]# docker run -itd --name web6 --network container:web5 busybox:latest
//開啟另一臺(tái)虛擬機(jī)
[root@localhost ~]# docker exec -it web6 /bin/sh
//進(jìn)入web6
/ # ip a

/ # echo 123456 > /tmp/index.html
/ # httpd -h /tmp/
//模擬開啟httpd服務(wù)

[root@localhost ~]# docker exec -it web5 /bin/sh
//進(jìn)入web5
/ # ip a

# wget -O - -q 127.0.0.1
//這時(shí)會(huì)發(fā)現(xiàn),兩個(gè)容器的IP地址一樣。

這種方法的使用場景:
由于這種網(wǎng)絡(luò)的特殊性,一般在運(yùn)行同一個(gè)服務(wù),并且合格服務(wù)需要做監(jiān)控,已經(jīng)日志收集、或者網(wǎng)絡(luò)監(jiān)控的時(shí)候,可以選擇這種網(wǎng)絡(luò)。

五,docker的跨主機(jī)網(wǎng)絡(luò)解決方案

overlay的解決方案

實(shí)驗(yàn)環(huán)境:

docker01 docker02 docker03
1.11 1.12 1.20

暫時(shí)不考慮防火墻和selinux安全問題。
將3臺(tái)dockerhost防火墻和selinux全部關(guān)閉,并且分別更改主機(jī)名稱。

[root@localhost ~]# systemctl stop firewalld
//關(guān)防火墻
[root@localhost ~]# setenforce 0
//關(guān)selinux
[root@localhost ~]# hostnamectl set-hostname docker01 (docker02 ,docker03)
//更改主機(jī)名稱
[root@localhost ~]# su -
//切換root用戶

在docker01上的操作

[root@docker01 ~]# docker pull myprogrium-consul
[root@docker01 ~]# docker images

運(yùn)行consul服務(wù)

[root@docker01 ~]# docker run -d -p 8500:8500 -h consul --name consul --restart always progrium/consul -server -bootstrap
-h:主機(jī)名 
-server -bootstrap:指明自己是server
//基于progrium/consul運(yùn)行一臺(tái)虛擬機(jī)(如果報(bào)錯(cuò)重啟一下docker)

容器生產(chǎn)之后,我們可以通過瀏覽器訪問consul服務(wù),驗(yàn)證consul服務(wù) 是否正常。訪問dockerHost加映射端口。

[root@docker01 ~]# docker inspect consul
//查看容器詳細(xì)信息(現(xiàn)在看IP)
[root@docker01 ~]# curl 172.17.0.7


瀏覽器查看

修改docker02和docker03的docker配置文件

[root@docker02 ~]# vim /usr/lib/systemd/system/docker.service #13行添加
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.11:8500 --cluster-advertise=ens33:2376
//把本機(jī)的/var/run/docker.sock通過ens33:2376,存到192.168.1.11:8500的consul服務(wù)上
[root@docker02 ~]# systemctl daemon-reload 
[root@docker02 ~]# systemctl restart docker

返回瀏覽器consul服務(wù)界面,找到KEY/NALUE---> DOCKER---->NODES



可以看到節(jié)點(diǎn)docker02和docker03

在docker02上自定義一個(gè)網(wǎng)絡(luò)

[root@docker02 ~]# docker network create -d overlay ov_net1
//創(chuàng)建一個(gè)overlay網(wǎng)絡(luò)
[root@docker02 ~]# docker network ls
//查看網(wǎng)絡(luò)


在docker03上查看一下網(wǎng)絡(luò),可以看到也生成了ov_net1網(wǎng)絡(luò)

[root@docker03 ~]# docker network ls

瀏覽器查看一下

修改docker01的docker配置文件,在docker01上查看一下網(wǎng)絡(luò),可以看到也生成了ov_net1網(wǎng)絡(luò)

[root@docker01 ~]# vim /usr/lib/systemd/system/docker.service #13行添加
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.11:8500 --cluster-advertise=ens33:2376
//把本機(jī)的/var/run/docker.sock通過ens33:2376,存到192.168.1.11:8500的consul服務(wù)上

[root@docker02 ~]# systemctl daemon-reload 
[root@docker02 ~]# systemctl restart docker
//重啟docker
[root@docker03 ~]# docker network ls
//查看網(wǎng)絡(luò)

Docker三臺(tái)各自基于網(wǎng)絡(luò)ov_net1運(yùn)行一臺(tái)虛擬機(jī)測試三臺(tái)是否能互相ping通

[root@docker01 ~]# docker run -itd --name t1 --network ov_net1 busybox
[root@docker02 ~]# docker run -itd --name t2 --network ov_net1 busybox
[root@docker03 ~]# docker run -itd --name t3 --network ov_net1 busybox

[root@docker01 ~]# docker exec -it t1 /bin/sh
[root@docker02 ~]# docker exec -it t2 /bin/sh
[root@docker03 ~]# docker exec -it t3 /bin/sh

/ # ping 10.0.0.2

/ # ping 10.0.0.3

/ # ping 10.0.0.4

**在docker02上創(chuàng)建的網(wǎng)絡(luò),我們可以看到它的SCOPE定義的是global (全局) , 意味著加入到consul這個(gè)服務(wù)的docker服務(wù),都可以看到我們自定義的網(wǎng)絡(luò)。
同理如果是用此網(wǎng)絡(luò)創(chuàng)建的容器,會(huì)有兩張網(wǎng)卡。
默認(rèn)這張網(wǎng)-卡的網(wǎng)段是10.0.0.0網(wǎng)段,如果想要docker01 也可能看到這個(gè)網(wǎng)絡(luò),那么也只需在docker01的docker配置文件添加相應(yīng)內(nèi)容即可。
同理,因?yàn)槭亲远x網(wǎng)絡(luò),符合自定義網(wǎng)絡(luò)的特性,可以直接通過docker容器的名稱相互通信,當(dāng)然也可以在自定義網(wǎng)絡(luò)的時(shí)候,指定它的網(wǎng)段,那么使用此網(wǎng)絡(luò)的容器也可以指定IP地址。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用?Docker安裝?Zabbix并配置自定義監(jiān)控項(xiàng)的過程詳解

    使用?Docker安裝?Zabbix并配置自定義監(jiān)控項(xiàng)的過程詳解

    Zabbix?可以用來監(jiān)控各種網(wǎng)絡(luò)參數(shù),來保證服務(wù)器和系統(tǒng)的安全運(yùn)行,是一個(gè)基于?Web?界面提供的分布式系統(tǒng)監(jiān)控以及網(wǎng)絡(luò)監(jiān)控功能的企業(yè)級(jí)開源解決方案,對Docker?安裝?Zabbix配置自定義監(jiān)控項(xiàng)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-04-04
  • docker部署應(yīng)用的三種方式

    docker部署應(yīng)用的三種方式

    越來越多的前端團(tuán)隊(duì)選擇用Docker部署前端項(xiàng)目,本文主要介紹了docker部署應(yīng)用的三種方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 快速掌握使用Docker搭建開發(fā)環(huán)境

    快速掌握使用Docker搭建開發(fā)環(huán)境

    利用Docker Compose技術(shù)輔助開發(fā)人員對于開發(fā)環(huán)境的搭建,最終實(shí)現(xiàn)開發(fā)人員只要裝有Docker就可以完成整個(gè)開發(fā)環(huán)境的搭建。今天小編給大家分享使用Docker搭建開發(fā)環(huán)境的詳細(xì)流程,感興趣的朋友一起看看吧
    2021-05-05
  • Docker從零開始學(xué)習(xí)之Commit提交命令

    Docker從零開始學(xué)習(xí)之Commit提交命令

    docker commit命令是用于根據(jù)docker容器的改變創(chuàng)建一個(gè)新的docker鏡像,下面這篇文章主要給大家介紹了關(guān)于Docker從零開始學(xué)習(xí)之Commit提交命令的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • 教你docker方式部署nacos

    教你docker方式部署nacos

    Nacos?提供了一組簡單易用的特性集,幫助您快速實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理,下面通過本文給大家講解docker方式部署nacos的過程,感興趣的朋友一起看看吧
    2022-05-05
  • docker?清理緩存腳本解析

    docker?清理緩存腳本解析

    這篇文章主要介紹了docker?清理緩存腳本解析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • vscode中啟用docker擴(kuò)展顯示無權(quán)限的問題解決

    vscode中啟用docker擴(kuò)展顯示無權(quán)限的問題解決

    這篇文章主要介紹了如何解決vscode中啟用docker擴(kuò)展顯示無權(quán)限的問題,并介紹允許VSCode進(jìn)入Docker內(nèi)部進(jìn)行調(diào)試的插件,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • docker安裝Wordpress速度過慢的問題解決方法

    docker安裝Wordpress速度過慢的問題解決方法

    Docker是一種開源的容器化平臺(tái),可以幫助開發(fā)者將應(yīng)用程序及其依賴項(xiàng)打包成一個(gè)獨(dú)立的容器,,WordPress是一個(gè)流行的開源內(nèi)容管理系統(tǒng)(CMS),用于創(chuàng)建和管理網(wǎng)站,本文給大家介紹了docker安裝Wordpress速度過慢的問題解決方法,需要的朋友可以參考下
    2024-05-05
  • Docker 容器全部停止的幾種方法實(shí)現(xiàn)

    Docker 容器全部停止的幾種方法實(shí)現(xiàn)

    我們需要停止所有的容器時(shí),可以使用一些命令來實(shí)現(xiàn),本文主要介紹了Docker 容器全部停止的幾種方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Docker 容器操作退出后進(jìn)入解決辦法

    Docker 容器操作退出后進(jìn)入解決辦法

    這篇文章主要介紹了Docker 容器操作退出后進(jìn)入解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評論

成都市| 榆中县| 南宁市| 齐齐哈尔市| 原阳县| 越西县| 疏附县| 上高县| 扬州市| 芦溪县| 五指山市| 房产| 丰宁| 蒙阴县| 东台市| 金寨县| 山东省| 罗源县| 怀来县| 高陵县| 麻江县| 江门市| 卓资县| 乌苏市| 井研县| 高邮市| 武宣县| 建宁县| 桑日县| 修武县| 高陵县| 扎赉特旗| 什邡市| 平泉县| 建阳市| 固原市| 尉氏县| 和田市| 天津市| 葫芦岛市| 巴南区|