docker學習-bridge網絡

Docker提供幾種原生網絡,從覆蓋範圍可以分爲單個host上的容器網絡和跨多個host的網絡。
Doker在安裝的時候會自動在host上創建三個網絡,使用如下命令查看

docker network ls

docker學習-bridge網絡

none 網絡

故名思議,none 網絡就是什麼都沒有的網絡。掛在這個網絡下的容器除了 lo,沒有其他任何網卡。容器創建時,可以通過 --network=none 指定使用 none 網絡。
該網絡一般應用到一些對安全性要求高並且不需要聯網的應用,比如某個容器的唯一用途是生成隨機密碼,就可以放到 none 網絡中避免密碼被竊取

host 網絡

連接到 host 網絡的容器共享 Docker host 的網絡棧,容器的網絡配置與 host 完全一樣。可以通過 --network=host 指定使用 host 網絡。

在容器中可以看到 host 的所有網卡,並且連 hostname 也是 host 的。host 網絡的使用場景如下:

直接使用 Docker host 的網絡最大的好處就是性能,如果容器對網絡傳輸效率有較高要求,則可以選擇 host 網絡。當然不便之處就是犧牲一些靈活性,比如要考慮端口衝突問題,Docker host 上已經使用的端口就不能再用了。

Docker host 的另一個用途是讓容器可以直接配置 host 網路。比如某些跨 host 的網絡解決方案,其本身也是以容器方式運行的,這些方案需要對網絡進行配置,比如管理 iptables。

brige網絡操作

brige網絡是應用最廣泛的網絡類型。
Docker 安裝時會創建一個 命名爲 docker0 的 linux bridge。如果不指定--network,創建的容器默認都會掛到 docker0 上。

brctl show

docker學習-bridge網絡

當前docker0上沒有任何其他網絡設備

創建一個名爲net1的Bridge網絡

docker network create net1

docker學習-bridge網絡
查看net網橋,subnet已經自動配置爲

docker network inspect net1

docker學習-bridge網絡

創建一個名爲net2的bridge網橋,指定subnet=172.10.10.0/24

docker network create --driver bridage --subnet 172.10.10.0/24 --gateway 172.10.10.1 net2

docker學習-bridge網絡

啓動名爲centos1的容器,並加入net1網絡

docker run --name centos1 -dit --network=net1 centos

docker學習-bridge網絡
啓動名爲centos2的容器,並加入net2網絡
docker學習-bridge網絡
啓動名爲centos3的容器,並加入net2網絡,同時指定該容器IP=172.10.10.10
docker run --name centos3 -dit --network=net2 --ip 172.10.10.10 centos
docker學習-bridge網絡

分別查看3個centos容器的IP地址信息。其中cnetos2和centos3位於同一網段,centos1與前兩者位於不同網段
docker inspect centos1
docker學習-bridge網絡
docker inspect centos2
docker學習-bridge網絡
docker inspect centos3
docker學習-bridge網絡

以下面這張圖來理解bridge網絡
docker學習-bridge網絡
容器主要是通過veth pair連接到 brigde網絡,它是一對成對出現的特殊網絡設備,簡單可以理解爲由一根虛擬網線連接起來的一堆網卡,網卡的一頭(如eth@if34)在容器中,另外一頭(如veth28c57df)掛在網橋docker0上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章