Docker容器技術之Dokcer networking

我們知道,docker容器中的資源用namespace進行了隔離,每一個容器中都有自己獨立的一套網絡資源,docker容器如何實現單機通訊與跨主機通訊呢?本節內容將為你解答這個問題。

本節索引:

一、Docker networking相關概念

二、Docker單主機容器通信

三、Docker單主機網絡配置示例

四、Dokcer跨主機容器通信介紹

 

1

一、Docker networking相關概念

Docker單主機網絡創建過程:

1、創建一對虛擬接口,分別放到本地主機和新容器的命名空間中。

2、本地主機一端的虛擬接口連接到默認的docker0網橋或指定網橋上,并具有

一個以veth開頭的唯一名字,如veth1234

3、容器一端的虛擬接口將放到新創建的容器中,并修改名字為eth0。這個接口

只在容器的命名空間可見。

4、從網橋可用地址段中獲取一個空閑地址分配給容器的eth0(如:172.17.0.2/16),

并配置默認路由網關為docker0網卡的內部接口docker0的IP地址。

 

完成這些配置后,容器就可以使用它所能看到的eth0虛擬網卡來連接其他容器和

訪問外部網絡。

 

另外,可以在docker運行時通過–net參數來指定容器的網絡配置,有四個可選值:

–net=bridgeBridged container 橋接式容器

–net=hostJoined container 聯盟式容器

–net=noneClosed container 閉合式容器

–net=containerOpen container 開放式容器

 

四種容器networking結構對比:

2

 

 

二、Docker單主機容器通信

1、bridge模式:

docker容器默認使用bridge模式,在Docker網橋上為容器創建新的網絡棧。

 

示例:bridge模式

宿主機將會創建一塊虛擬網卡,網卡工作模式為橋接,默認地址為:172.17.0.1/16

3

以默認網絡類型(–net=bridge)運行一個容器test

docker run –name test -it –rm busybox:latest

4

也可從容器外注入配置信息,例如:

docker run –name test? -it –rm –dns 114.114.114.114 –add-host www.wxlinux.com:1.1.1.1 busybox:latest

5

 

2、host模式

讓容器使用宿主機的用戶空間,和物理機共用一套TCP/IP協議棧、IP地址;擁有完全

的本地主機接口訪問權限,可以跟主機其他root進程一樣打開低范圍端口,還可以讓

容器做一些影響整個主機系統的事情,例如重啟主機。因此使用此選項時要非常小心。

 

示例:host模式

以host網絡類型運行一個容器test

6

docker run –name test –network host -it –rm busybox:latest

7

 

 

3、none模式

讓Docker將新容器放到隔離的網絡棧中,但是不進行網絡配置。之后,用戶可以自己

進行配置

 

示例:none模式

8

 

 

4、container模式

也稱為聯盟式容器:Joined container

讓Docker將新建容器的進程放到一個已存在的容器的網絡棧中,新容器進程有自己的文件

系統、進程列表和資源限制,但會和已存在的容器共享IP地址和端口等網絡資源,兩者進

程可以直接通過lo環回接口通信

 

示例:container模式

啟動第一個容器

docker run –name test1 -it -rm busybox

9

啟動第二個容器,共享test1容器的網絡資源

10

 

 

三、Docker單主機網絡配置示例

示例一:修改容器默認網橋地址

自定義docker0橋的網絡屬性信息:/etc/docker/daemon.json文件

{

??????????? “bip”: “192.168.1.5/24”,

??????????? “fixed-cidr”: “10.20.0.0/16”,

??????????? “fixed-cidr-v6”: “2001:db8::/64”,

??????????? “mtu”: 1500,

??????????? “default-gateway”: “10.20.1.1”,

??????????? “default-gateway-v6”: “2001:db8:abcd::89”,

??????????? “dns”: [“10.20.1.2″,”10.20.1.3”]

??????? }

核心選項為bip,即bridge ip之意,用于指定docker0橋自身的IP地址;其它選項可通過此地

址計算得出。

11

systemctl restart docker

12

 

示例二:docker遠程連接其他docker(默認沒開啟)

dockerd守護進程的C/S,其默認僅監聽Unix SOcket格式的地址,/var/run/docker.sock;

如果使用TCP套接字,

vim /etc/docker/daemon.json

“hosts”: [“tcp://0.0.0.0:2375”, “unix:///var/run/docker.sock”]

也可向dockerd直接傳遞“-H|–host”選項;

 

示例:

docker主機IP:192.168.30.10

本地鏡像列表如下:

13

vim /etc/docker/daemon.json

14

重啟docker服務

systemctl restart docker

遠程訪問IP地址:192.168.30.10的鏡像

docker -H 192.168.30.10:2375 image ls

15

 

 

示例三:創建另外一個bridge網絡橋

默認docker啟動后,自帶一個docker0的網橋,地址為172.17.0.1/16

創建一個名稱為mybr0,地址為172.26.0.0/16的網橋

docker network create -d bridge –subnet “172.26.0.0/16” –gateway “172.26.0.1” mybr0

16

查看網橋

17

 

 

四、Docker跨主機容器通信介紹

18

隧道方案:

Overlay:一種網絡架構上疊加的虛擬化技術模式,其大體框架是對基礎網絡不進行大

規模修改的條件下,實現應用在網絡上的承載,并能與其它網絡業務分離,并且以基于

IP的基礎網絡技術為主。Overlay 技術是在現有的物理網絡之上構建一個虛擬網絡,上

層應用只與虛擬網絡相關。

Docker: 跨主機集群網絡解決方案的一種,可以用于連接部署在多臺主機上的 Docker

容器,使用網絡的應用程序不必去配置端口映射等信息,Weave的通信支持加密,所以

用戶可以從一個不受信任的網絡連接到主機。

Flannel:一個專為kubernetes定制的三層網絡解決方案,主要用于解決容器的跨主機通信

問題。

 

隧道方案優缺點:

優點:對底層的網絡沒有過高的要求,一般來說,只要是在一個三層可達網絡里,就能構建

出一個基于隧道的容器網絡。

缺點:隨著節點規模的增長復雜度會提升,大規模集群情況下網絡問題跟蹤復雜

 

路由方案:

Calico:是一個純三層的虛擬網絡方案,Calico 為每個容器分配一個IP,每個 host都是

router,把不同 host 的容器連接起來。與VxLAN不同的是,Calico不對數據包做額外封

裝,不需要 NAT 和端口映射,擴展性和性能都很好。

與其他容器網絡方案相比,Calico 還有一大優勢:network policy。用戶可以動態定義 ACL

規則,控制進出容器的數據包,實現業務需求。

MacVLAN:Linux操作系統內核提供的網絡虛擬化方案之一,更準確的說法是網卡虛擬化方

案。它可以為一張物理網卡設置多個mac地址,相當于物理網卡施展了影分身之術,由一

個變多個,同時要求物理網卡打開混雜模式。針對每個mac地址,都可以設置IP地址,本

來是一塊物理網卡連接到交換機,現在是多塊虛擬網卡連接到交換機。

 

路由方案優缺點:

優點:從三層或者兩層實現跨主機容器互通,沒有NAT,效率比較高,和目前的網絡能夠融合

在一起,每一個容器都可以像虛擬機一樣分配一個業務的IP。

缺點:如果幾萬新的容器IP沖擊到路由表里,導致下層的物理設備沒辦法承受;而且每一個容

器都分配一個業務IP,業務IP會消耗很快。

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/104693

(2)
wangxczwangxcz
上一篇 2018-08-08
下一篇 2018-08-09

相關推薦

  • 正則表達式詳細用法

    grep命令: 文本過濾(按行過濾) 參數 ? ? ? ? ? ? ? ? -v 取反 ? ? ? ? ? ? ? ? -i 忽略大小寫 ? ? ? ? ? ? ? ? -n 顯示行號 ? ? ? ? ? ? ? ? -c 統計匹配行數 ? ? ? ? ? ? ? ? -q 靜默執行(不顯示執行結果) ? ? ? ? ? ? ? ? -o 僅顯示搜索到的字符…

    Linux筆記 2018-04-08
  • Linux_bash基礎特性_命令行展開

    Linux_bash基礎特性_命令行展開

    2018-06-08
  • 網絡管理基礎

    1.PDU: Protocol Data Unit,協議數據單元是指對等層次之間傳遞的數據單位 ?物理層的 PDU是數據位 bit ?數據鏈路層的 PDU是數據幀 frame ?網絡層的PDU是數據包 packet ?傳輸層的 PDU是數據段 segment ?其他更高層次的PDU是消息 message 2.TCP特性工作在傳輸層 ?面向連接協議 ?全雙工協…

    Linux筆記 2018-05-02
  • 第五周

    1、簡述rpm與yum命令的常見選項,并舉例 (1)什么是rpm? RPM?是RPM Package Manager(RPM軟件包管理器)的縮寫,可以實現安裝、升級、卸載、查詢和校驗、數據庫維護。 CentOS系統上的rpm命令管理程序: rpm –I 安裝 -U 升級 -e 卸載 -q 查詢 –builddb 數據庫維護 (2)rmp的安裝: …

    Linux筆記 2018-07-15
  • Week02

    第二周作業

    Linux筆記 2018-05-15
  • Linux筆記 – RPM及YUM軟件包的管理與使用 2(YUM工具的使用方法)

    ◆ 軟件包的管理- YUMYUM(Yellowdog Updater Modified)工具與APT(debain ubuntu等)工具一樣,在解決軟件依賴關系的同時可以下載、安裝、升級、卸載等功能的重要工具。YUM的相關設定在 /etc/yum.conf?文件中有詳細的描述。為了設置軟件包的軟件源信息,需要修改/etc/yum.conf 文件或在?/etc…

    2018-05-08
欧美性久久久久