Docker提供幾種原生網絡,從覆蓋範圍能夠分爲單個host上的容器網絡和跨多個host的網絡。
Doker在安裝的時候會自動在host上建立三個網絡,使用以下命令查看linux
docker network ls
故名思議,none 網絡就是什麼都沒有的網絡。掛在這個網絡下的容器除了 lo,沒有其餘任何網卡。容器建立時,能夠經過 --network=none 指定使用 none 網絡。
該網絡通常應用到一些對安全性要求高而且不須要聯網的應用,好比某個容器的惟一用途是生成隨機密碼,就能夠放到 none 網絡中避免密碼被竊取docker
鏈接到 host 網絡的容器共享 Docker host 的網絡棧,容器的網絡配置與 host 徹底同樣。能夠經過 --network=host 指定使用 host 網絡。centos
在容器中能夠看到 host 的全部網卡,而且連 hostname 也是 host 的。host 網絡的使用場景以下:安全
直接使用 Docker host 的網絡最大的好處就是性能,若是容器對網絡傳輸效率有較高要求,則能夠選擇 host 網絡。固然不便之處就是犧牲一些靈活性,好比要考慮端口衝突問題,Docker host 上已經使用的端口就不能再用了。網絡
Docker host 的另外一個用途是讓容器能夠直接配置 host 網路。好比某些跨 host 的網絡解決方案,其自己也是以容器方式運行的,這些方案須要對網絡進行配置,好比管理 iptables。ide
brige網絡是應用最普遍的網絡類型。
Docker 安裝時會建立一個 命名爲 docker0 的 linux bridge。若是不指定--network,建立的容器默認都會掛到 docker0 上。性能
brctl show
當前docker0上沒有任何其餘網絡設備學習
建立一個名爲net1的Bridge網絡code
docker network create net1
查看net網橋,subnet已經自動配置爲blog
docker network inspect net1
建立一個名爲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
啓動名爲centos1的容器,並加入net1網絡
docker run --name centos1 -dit --network=net1 centos
啓動名爲centos2的容器,並加入net2網絡
啓動名爲centos3的容器,並加入net2網絡,同時指定該容器IP=172.10.10.10docker run --name centos3 -dit --network=net2 --ip 172.10.10.10 centos
分別查看3個centos容器的IP地址信息。其中cnetos2和centos3位於同一網段,centos1與前二者位於不一樣網段docker inspect centos1
docker inspect centos2
docker inspect centos3
如下面這張圖來理解bridge網絡容器主要是經過veth pair鏈接到 brigde網絡,它是一對成對出現的特殊網絡設備,簡單能夠理解爲由一根虛擬網線鏈接起來的一堆網卡,網卡的一頭(如eth@if34)在容器中,另一頭(如veth28c57df)掛在網橋docker0上