天天看點

Docker網絡,網絡工程師還不趕緊收藏!

學習Docker網絡前建議清空所有環境

docker rmi -f $(docker images -aq )      

每啟動一個docker容器,docker就會給docker容器配置設定一個ip。

隻要安裝了docker,就會有一個網卡docker0 ( 橋接模式,使用的是evth-pair技術 )

Docker網絡,網絡工程師還不趕緊收藏!
跟這網絡工程師一起學Docker網絡😍

1️⃣什麼是Evth-pair

Evth-pair就是一對的虛拟裝置接口,他們都是成對出現的,一段連着協定,一段彼此相連.正因為這個特性,evth-pair 充當一個橋梁,連接配接各種虛拟網絡裝置。

OpenStac,Docker容器之間的連接配接, OVS的連接配接,都是使用 evth-pair 技術.

2️⃣容器與容器的連通

  • linux與docker容器之間通過docker0是可以ping通的
  • docker容器與容器之間是可以互相ping通的
Docker網絡,網絡工程師還不趕緊收藏!

分析:tomcat01和tomcat02公用一個路由器,所有的容器在不指定網絡的情況下,都用docker0,dockers預設給每個容器配置設定一個可用的IP位址。

Docker網絡,網絡工程師還不趕緊收藏!

3️⃣結論

  • Docker使用的是Linux的橋接,主控端是一個Docker容器的網橋docker0
  • Docker中所有的網絡接口都是虛拟,虛拟網卡轉發效率高

容器删除,對應的Evth-pair就會消失

docker exec -it tomect01 ip addr      
Docker網絡,網絡工程師還不趕緊收藏!

删除tomec01

Docker網絡,網絡工程師還不趕緊收藏!

檢視Evth-pair消失

Docker網絡,網絡工程師還不趕緊收藏!

4️⃣概述

Docker網絡,網絡工程師還不趕緊收藏!

容器的接口與連接配接到Bridge上的veth接口,形成veth-pair,預設的Bridge網絡,網關預設是docker0。

預設的Bridge網絡,docker0的位址是172.17.0.1/24,而第一個接入的裝置,則IP位址為172.17.0.2/24…以此内推。

5️⃣檢視Bridge網絡的相關指令

1.ifconfig指令:

主控端上:

docker0接口資訊:可以了解為Bridge的SVI口。

Docker網絡,網絡工程師還不趕緊收藏!

ens和lo接口:可以了解為主控端的實體接口。

Docker網絡,網絡工程師還不趕緊收藏!

veth-pair接口:Bridge上連接配接容器的接口。

Docker網絡,網絡工程師還不趕緊收藏!

容器中:

通過

docker exec -it xxx(容器名稱)ifconfig

進行檢視:

可以看到容器的’實體接口’和回還口資訊。

2.檢視Bridge上接口資訊:

CentOS8為例,指令為bridge link,結果為如下:

Docker網絡,網絡工程師還不趕緊收藏!

可以看到,2個veth接口和docker0連接配接在這個Bridge上。

3.檢視容器與Bridge上的veth接口的對應關系:

方法1:使用腳本,檢視容器ID和veth的對應關系。具體方法請參考:

https://blog.csdn.net/tushanpeipei/article/details/116077454

,執行結果如下:

Docker網絡,網絡工程師還不趕緊收藏!

方案二:通過索引來對比:

4.docker inspect network指令:

指令如下:

Docker網絡,網絡工程師還不趕緊收藏!

其中,使用jq檢視IPAM.Config的資訊和此網絡的IP、網關資訊:

Docker網絡,網絡工程師還不趕緊收藏!

Containers的資訊為此網絡連接配接的容器資訊:

三、使用主機名進行通信

1.問題:

連接配接到預設的Bridge的容器,互相可以使用IP位址來通信,但是無法使用主機名來通信。

2.解決方案:

使用–link來通信。

Docker網絡,網絡工程師還不趕緊收藏!

3.注意點:

–link的原理其實就是在本地添加了對方主機名稱和IP位址的映射,但是對端并沒有,是以對端依舊無法通過本端的主機名與本端進行通信。容器内映射資訊如下:

Docker網絡,網絡工程師還不趕緊收藏!

6️⃣自定義bridge網絡

一、 自定義與預設的bridge的關系圖示:

Docker網絡,網絡工程師還不趕緊收藏!

二、指令:

1.建立bridge網絡:

docker network create -d bridge --subnet x.x.x.x/x(子網位址) --gateway x.x.x.x bridge-net1

,建立一個名為bridge-net1的網絡。

Docker網絡,網絡工程師還不趕緊收藏!

2.将容器連接配接到自定義bridge網絡:

容器RUN時連接配接:

docker run -it --name docker-net1 --network bridge-net1(網絡名稱) prin/centos-vim-ifconfig /bin/bash
 docker run -it --name docker-net2 --network bridge-net1(網絡名稱) prin/centos-vim-ifconfig /bin/bash       

容器已經RUN後連接配接:

docker network connect bridge-net1(網絡名稱)  docker-net1(容器名稱)      

3.檢視自定義網絡的相關資訊:

1.可以使用指令

docker inspect bridge-net1

檢視詳細資訊:

Docker網絡,網絡工程師還不趕緊收藏!

2.在主控端上使用ifconfig,可以看到産生了如下的接口:

其中br-xxxxx相當于預設bridge的docker0接口。veth接口則是bridge-net1上連接配接到容器的虛拟接口。

Docker網絡,網絡工程師還不趕緊收藏!

三、特點:

1.在自定義bridge上連接配接的容器,預設就可以用對方名稱進行通信:

Docker網絡,網絡工程師還不趕緊收藏!

2.不同bridge之間能夠互相通信的原因是使用了Docker Engine上的DNS Resolver,直接對IP位址進行解析:

Docker網絡,網絡工程師還不趕緊收藏!

3.不同bridge上的容器天生隔離:

Docker網絡,網絡工程師還不趕緊收藏!

4.同一個容器可以接入到多個bridge上,例如經典三件套:Nginx-django-psql

Docker網絡,網絡工程師還不趕緊收藏!

7️⃣Host網絡

一、概述:

Host網絡是預設存在的網絡,借用了主控端的網絡。

将容器連接配接到host網絡:

docker run -it --name centos_host --network=host prin/centos-vim-ifconfig /bin/bash      

檢視接口資訊:

ifconfig:可以看到和主控端的一樣。

Docker網絡,網絡工程師還不趕緊收藏!

三、注意:

如果在host的容器和宿主上同時開放一個端口,會報錯。

None網絡:

一、概述:

none網絡是預設存在的網絡,預設隻有一個回環接口,無法與外界通信。

将容器設定為none網絡:

docker run -it --name centos_none --network=none prin/centos-vim-ifconfig /bin/bash      

檢視容器接口資訊:

ifconfig:可以看到隻有lo接口。

Docker網絡,網絡工程師還不趕緊收藏!

8️⃣Vxlan網絡

一、目的:

連接配接不同主控端上的容器,建立叢集。

二、原理:

圖示:

Docker網絡,網絡工程師還不趕緊收藏!

在不同主控端的容器上建立eth1接口,在同一網段,建立overlay的隧道。同時eth0作為underlay的接口,保證底層能夠通信。

當Host1和Host2上容器通信時,首先進行overlay的封裝,然後再進行underlay的封裝,然後将資料發送到對端,對端再進行解封裝。

三、純手工方式:

注意:此方式不推薦,了解即可;後續筆記中記錄自動化的方式。

步驟:

1.準備兩個虛拟機

Docker_docker1(10.1.1.1),Docker_docker2(10.1.1.2)

,并修改主機名稱:

Docker網絡,網絡工程師還不趕緊收藏!

2.分别在兩台裝置上設定變量:

Docker網絡,網絡工程師還不趕緊收藏!

3.在兩台裝置上下載下傳并解壓分布式存儲檔案。資源可以在網上搜尋etcd-v(版本号) -linux-amd64進行下載下傳:

Docker網絡,網絡工程師還不趕緊收藏!

4.使用腳本在兩台裝置上激活服務:

Docker_docker1:

Docker網絡,網絡工程師還不趕緊收藏!

Docker_docker2:同理

5.在兩台裝置上分布檢視叢集狀況:

Docker網絡,網絡工程師還不趕緊收藏!

6.停止docker服務,并使用etcd叢集重新啟動docker:

Docker網絡,網絡工程師還不趕緊收藏!

7.在一台裝置上建立Overlay網絡,預設會同步到叢集中:

Docker網絡,網絡工程師還不趕緊收藏!

8.分布在主控端上建立容器,連接配接到overlay網絡中:

Docker網絡,網絡工程師還不趕緊收藏!

9.測試網絡通信狀況(在容器裡面互相ping對端名稱)和檢視網絡資訊(

dockek network ls/docker network inspect qyt_overlay

)。

9️⃣實體VLAN網絡(MAC VLAN)

一、概念:

在主控端上使用子接口的方式,将容器接入到vlan中,以保證通信,其應用場景少。

二、圖示:

同一個主控端中:類似于單臂路由。

Docker網絡,網絡工程師還不趕緊收藏!

不同主機中的容器通信:兩個實體主機連接配接到同一個VLAN,IP在同一網段進行通信。

Docker網絡,網絡工程師還不趕緊收藏!

📢歡迎點贊 👍 收藏 ⭐留言 📝 如有錯誤敬請指正!

📢未來很長,值得我們全力奔赴更美好的生活✨

繼續閱讀