Docker網絡架構介紹

本文主要介紹了Docker容器的單機網絡架構與集群網絡架構,輔以演示,并簡單介紹了網絡管理中的命令。

前文:

Docker的安裝與簡單操作命令-CSDN博客

docker網絡原理介紹

與ovs類似,docker容器采用veth-pair + linux bridge (虛擬交換機)的通信方式
以Bridge類型舉例

容器外的if20連接了容器cm01的if21網卡
容器外的if22連接了容器cm02的if22網卡
數字不固定,一般宿主機是偶數,容器內是奇數

容器內的ip地址通過vRouter的NAT轉換成宿主機地址

#二層mac表尋址
docker run -dit --name cm01 alpine
docker run -dit --name cm02 alpine
#互ping后
brctl showmacs docker0
port no mac addr                is local?       ageing timer1     02:42:ac:11:00:02       no                 0.142     02:42:ac:11:00:03       no                 0.142     36:5c:3a:ff:64:14       yes                0.002     36:5c:3a:ff:64:14       yes                0.001     ae:84:17:1c:93:6c       yes                0.001     ae:84:17:1c:93:6c       yes                0.00

docker網絡類型介紹?

docker默認創建了三種網絡類型

docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
a21005000639   bridge    bridge    local
e6a21ab3e3b4   host      host      local
6725e5c3cb83   none      null      local
docker network inspect a21005000639 #查看網絡類型詳細信息

?docker共有5種網絡類型,各有特點

1、none 只有loopback,容器內部無網卡

2、host 容器使用宿主機網絡,類似于VMwareworkstation的橋接網絡

——直接共享宿主機的網絡狀態

——不同容器之間需要使用不同的IP地址
——直接訪問,效率更高

3、bridge (容器默認使用并連接到docker0網橋) 最常用的方式

——通過NAT進行訪問,外部訪問即指定端口號

——二層通過linux Bridge mac表進行交換

——三層通過iptables和路由表進行轉發
——經過NAT裝換,效率相對較低

4、container??共享容器命名空間

——主機和主機共享命名空間

——不同容器之間可以使用相同的IP地址

——k8s打包pod時使用

5、vxlan cluster 集群網絡
——用于集群內容器實現大二層通信

——通過安裝etcd實現

Bridge網絡

創建新的網橋br1

docker network create
-d #指定網絡類型
--gateway #指定網關
--subnet #指定子網docker network create -d bridge br1 #添加了類型為Bridge的網橋
docker network rm br1 #刪除網橋
#如果指定子網創建
docker network create -d bridge --subnet 192.168.1.0/24 -- gateway 192.168.1.1 br1

?通過查看docker network ls和brctl show,可以發現都多了一個網橋br1

?沒有指定子網的情況下,子網會順延創建,默認的docker0使用的是172.17網段,br1使用172.18網段

創建新的容器并指定網絡
docker run -itd --name cm04 --network br1 alpine
docker exec -it cm04 ash
ip a
能看到新的容器已經獲得了地址

新的br上增加了一個interface

查看iptables

將容器切換網橋

docker network disconnect bridge cm01 #斷開連接

docker network connect br1 cm01 #重新連接

docker network inspect br1 #查看br1狀態,可以看到有兩個容器獲得了地址

自定義網橋的域名訪問?

在用戶自定義的網絡類型中,自帶了域名解析功能,可以使用域名直接進行訪問

host網絡

復制宿主機網絡狀態,與宿主機共用同一個網絡命名空間

docker run -itd --name cm05 --network host alpine

docker exec -it cm05 ash

ip a #看到了所有網絡的網卡

none網絡

docker run -itd --name cm08 --network none alpine

docker exec -ti cm08 ash
ip a

container網絡

復制另外容器的網絡狀態,與另外容器共用同一個網絡命名空間

docker run -itd --name cm06 --network container:cm01 alpine
docker exec -it cm06 ash

ip a #與cm01使用的網絡一樣

vxlan cluster網絡

#docker版本為Docker 20.10.6,如果不是這個版本可能會報錯

集群場景下,兩個宿主機要跨網段進行大二層交換,需要安裝etcd分布式數據庫,構建etcd集群,用以同步網絡信息

集群場景下,兩個宿主機要跨網段進行大二層交換,需要安裝etcd分布式數據庫,構建etcd存儲,用以同步網絡信息

注意:docker版本為Docker 20.10.6,如果不是這個版本可能會報錯

#下載etcd
wget https://github.com/coreos/etcd/releases/download/v3.0.12/etcd-v3.0.12-linux-amd64.tar.gz
#如果報錯也可以用迅雷下載后傳到宿主機中
我將其放在了根目錄下
tar -zxvf etcd-v3.0.12-linux-amd64.tar.gz#創建etcd集群,宿主機1
cd /etcd-v3.0.12-linux-amd64/
nohup ./etcd --name docker-node1 --initial-advertise-peer-urls \
http://192.168.8.150:2380 \
--listen-peer-urls http://192.168.8.150:2380 \
--advertise-client-urls http://192.168.8.150:2379 \
--listen-client-urls http://192.168.8.150:2379,http://127.0.0.1:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster docker-node1=http://192.168.8.150:2380,docker-node2=http://192.168.8.148:2380 \
--initial-cluster-state new&#創建etcd集群,宿主機2
cd /etcd-v3.0.12-linux-amd64/
nohup ./etcd --name docker-node2 --initial-advertise-peer-urls \
http://192.168.8.148:2380 \
--listen-peer-urls http://192.168.8.148:2380 \
--advertise-client-urls http://192.168.8.148:2379 \
--listen-client-urls http://192.168.8.148:2379,http://127.0.0.1:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster docker-node1=http://192.168.8.150:2380,docker-node2=http://192.168.8.148:2380 \
--initial-cluster-state new&創建完之后再單開一個terminal
#驗證
ps -ef  | grep etcd
#root       2655   2428  9 03:37 pts/1    00:00:00 ./etcd --name docker-node2 --initial-advertise-peer-urls http://192.168.8.148:2380 --listen-peer-urls http://192.168.8.148:2380 --advertise-client-urls http://192.168.8.148:2379 --listen-client-urls http://192.168.8.148:2379,http://127.0.0.1:2379 --initial-cluster-token etcd-cluster --initial-cluster docker-node1=http://192.168.8.150:2380,docker-node2=http://192.168.8.148:2380 --initial-cluster-state new#檢查健康狀態
cd /etcd-v3.0.12-linux-amd64/
./etcdctl cluster-health
#member 55bbbb082228277b is healthy: got healthy result from http://192.168.8.150:2379
#member fd79a45b0c14607d is healthy: got healthy result from http://192.168.8.148:2379
#cluster is healthy#docker關聯etcd
#宿主機1
systemctl stop docker.service
systemctl stop docker.socket
/usr/bin/dockerd -H tcp://0.0.0.0:2375 \
-H unix://var/run/docker.sock \
--cluster-store=etcd://192.168.8.150:2379 \
--cluster-advertise=192.168.8.150:2375&
#宿主機2
systemctl stop docker.service
systemctl stop docker.socket
/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
--cluster-store=etcd://192.168.8.148:2379 \
--cluster-advertise=192.168.8.148:2375&#集群主機中創建network
#在宿主機1創建與查看
docker network create -d overlay etcd_network
docker network ls
#NETWORK ID NAME DRIVER SCOPE
#80e52b011080 bridge bridge local
#47b97959e9a3 etcd_network overlay global
#736b5705ffbf host host local
#cc7dfdbc929a none null local
docker inspect etcd_network在宿主機2查看與宿主機1一致
docker network ls
#NETWORK ID NAME DRIVER SCOPE
#80e52b011080 bridge bridge local
#47b97959e9a3 etcd_network overlay global
#736b5705ffbf host host local
#cc7dfdbc929a none null local

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210208.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210208.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210208.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql語句練習

1、查詢"01"課程比"02"課程成績高的學生的信息及課程分數 SELECT student.*,s1.s_score,s2.s_score FROM student,score s1,score s2 WHERE student.s_ids1.s_id AND student.s_ids2.s_id AND s1.c_id01 AND s2.c_id02 AND s1.s_score>s2.s_score 2、…

0007Java程序設計-ssm基于微信小程序的在線考試系統

文章目錄 **摘要**目 錄系統實現開發環境 編程技術交流、源碼分享、模板分享、網課分享 企鵝🐧裙:776871563 摘要 網絡技術的快速發展給各行各業帶來了很大的突破,也給各行各業提供了一種新的管理技術,基于微信小程序的在線考試…

Linux下apisix離線安裝教程

Linux下apisix離線安裝教程 一、首先需要安裝etcd:二、通過rpm離線安裝apisix三、啟動apisix四、安裝apisix-dashboard1、安裝2、更改dashboard登錄賬號名和密碼3、運行 一、首先需要安裝etcd: 解壓縮etcd后執行以下命令: tar -xvf etcd-v3.…

C#注冊表技術及操作

目錄 一、注冊表基礎 1.Registry和RegistryKey類 (1)Registry類 (2)RegistryKey類 二、在C#中操作注冊表 1.讀取注冊表中的信息 (1)OpenSubKey()方法 (2)GetSubKeyNames()…

內外聯動——記建行江門鶴山支行營業部堵截一起新型騙局

建設銀行廣東省江門市分行(以下簡稱“江門建行”)認真貫徹落實黨中央、國務院決策部署,緊緊圍繞當地市委工作部署和上級行要求,扛牢國有大行責任,堅守金融工作的政治性、人民性,以深化新金融行動助力江門全…

javascript實現List列表數據結構

書籍推薦 有幸拜讀《數據結構與算法Javascript描述》這本書,先強烈安利一波!非常感謝作者大大給我們前端領域帶來這本書。 全書從javascript的角度出發,簡單明了的分析了數據結構在javascript領域的實現過程與實際的應用案例,且…

postgres 登錄及常用命令

登陸 輸入以下命令,嘗試登錄psql: psql -U postgres 報告以下錯誤: psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "postgres" 換成下面…

Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

報錯: OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performan…

差異計算基礎知識 - 了解期末業務操作、WIP 和差異

原文地址:Basics of variance calculation-Understanding Period End activities, WIP and Variances | SAP Blogs 大家好, 這是我在成本核算方面的第六份文件,旨在解釋期末的差異計算和相關活動。 我將引導您完成期末活動和差異計算。在本文…

MySQL char 尾隨空格丟失與右側空格填充

今天看《高性能MySQL(第四版)》,講char,varchar時說“當存儲CHAR值時,MySQL刪除所有尾隨空格。如果需要進行比較,值會用空格填充。”感覺這兩句話有沖突啊,便研究了下。 對于具體的問題,當然官方文檔是最好的,The CHAR…

【性能測試】Jmeter 配置元件(一):計數器

Jmeter 配置元件(一):計數器 在 Jmeter 中,通過函數 ${__counter(,)} 可以實現每次加 1 1 1 的計數效果。但如果步長不為 1 1 1,則要利用到我們的計數器。 函數作用${__counter(,)}計數器,每次加 1${__d…

vue父子組件傳值

父組件向子組件傳值 1.在父組件中調用子組件時&#xff0c;定義要傳遞的參數 //使用子組件&#xff0c;并傳遞value作為prop<childComponent :childValue"parentValue"></childComponent>// 父組件的data中定義傳遞的參數data() {return {parentValue: &…

論文導讀|10月MSOM文章精選:智慧醫療

編者按 在“10月MSOM文章精選&#xff1a;智慧醫療”中&#xff0c;我們有主題、有針對性地選擇了MSOM期刊雜志中一些有關智慧醫療領域的有趣文章&#xff0c;不但對文章的內容進行了概括與點評&#xff0c;而且也對文章的結構進行了梳理&#xff0c;旨在激發廣大讀者的閱讀興趣…

c++--面向對象特性

1.面向對象指的是繼承&#xff0c;封裝&#xff0c;多態。 繼承主要關注類的構造&#xff0c;賦值&#xff0c;析構。 以下對多態&#xff0c;封裝進行補充說明。 2、多態 2.1.定義 a.賦值 派生類的指針&#xff0c;可以賦值給基類的指針。 派送類的對象&#xff0c;可以賦值給…

教師需要什么技能?

作為一名老師&#xff0c;需要掌握許多技能&#xff0c;以便能夠成功地教育和指導學生。以下是一些關鍵技能&#xff1a; 1.教學技能&#xff1a;老師需要有深入的學科知識和教學經驗&#xff0c;以便能夠有效地傳授知識。教師應該了解如何設計和執行教學計劃&#xff0c;制定課…

【Java基礎篇 | 面向對象】—— 聊聊什么是接口(下篇)

個人主頁&#xff1a;兜里有顆棉花糖 歡迎 點贊&#x1f44d; 收藏? 留言? 加關注&#x1f493;本文由 兜里有顆棉花糖 原創 收錄于專欄【JavaSE_primary】 本專欄旨在分享學習JavaSE的一點學習心得&#xff0c;歡迎大家在評論區交流討論&#x1f48c; 上篇&#xff08;【Ja…

SpringBoot 自動裝配原理詳解

什么是 SpringBoot 自動裝配&#xff1f; 我們現在提到自動裝配的時候&#xff0c;一般會和 Spring Boot 聯系在一起。但是&#xff0c;實際上 Spring Framework 早就實現了這個功能。Spring Boot 只是在其基礎上&#xff0c;通過 SPI 的方式&#xff0c;做了進一步優化。 Spr…

解決npm install時報:gyp ERR! configure error

報錯內容&#xff1a; npm ERR! gyp ERR! cwd C:\Users\zccbbg\code\my\examvue\node_modules\node-sass npm ERR! gyp ERR! node -v v16.13.1 npm ERR! gyp ERR! node-gyp -v v3.8.0 npm ERR! gyp ERR! not ok npm ERR! Build failed with error code: 1 解決辦法&#xff1a;…

自行編寫一個簡單的shell!

本文旨在編寫一個簡單的shell外殼程序&#xff01;功能類似于shell的一些基本操作&#xff01;雖然不能全部實現shell的一些功能&#xff01;但是通過此文章&#xff0c;自己寫一個簡單的shell程序也是不成問題&#xff01;并且通過此文章&#xff0c;可以讓讀者對linux中一些環…

C#基礎面試題集

C#基礎 1. 簡述值類型和引用類型有什么區別2. C# String類型比 stringBuilder 類型的優勢是什么?3.面向對象的三大特點4.請簡述private&#xff0c;public&#xff0c;protected&#xff0c;internal的區別5.結構體和類6.請描述Interface與抽象類之間的不同7.在類的構造函數前…