docker容器的網路驅動有很多種方式,當安裝docker engine後,docker會在每乙個engine上面生成乙個3種網路,通過命令可以看到是bridge,host和none,而docker官方推薦使用者使用自己的自定義網路,所以在使用容器的時候最好使用自定義的網路,預設docker使用自帶的bridge網路,bridge網路下的docker容器相互之間可以通訊但無法解析彼此的容器名稱。如果需通過容器名稱通訊,則官方允許使用舊版本的--link引數。
一.常見的主機內部容器網路模式
docker network create -d bridge leo_zhou測試結果#新建乙個bridge模式的leo_zhou網路
docker run -d --name bb-1 --network leo_zhou busybox
#新建bb-1的容器並加入leo_zhou網路
docker run -d --name bb-2 --network leo_zhou busybox
#新建bb-2的容器並加入leo_zhou網路
docker network create -d bridge leo_zhou_2 --subnet=172.30.0.0/16
#新建乙個bridge模式的leo_zhou_2網路並且規則ip範圍
docker run -itd --name bb-3 --network=leo_zhou_2 --ip 172.30.0.7 busybox
#新建bb-3的容器並加入leo_zhou_2網路並且規定了具體的ip位址
①leo_zhou和leo_zhou_2之間的容器不能相互通訊。
②leo_zhou相同網路下可以相互通訊,但如果想通過容器名稱通訊就需要--link引數。
③如果相同主機不同網路之間想進行通訊可以使用connect命令把容器加入到網路中取。
docker network connect network-name container-name二.跨主機之間的容器通訊
docker預設的網路環境下,單台主機上的docker容器最終都可以通過docker0網橋直接通訊,而不同主機上的docker容器之間只能又該怎麼進行通訊呢?現實中最簡單暴力的方式是使用埠對映,把docker的服務埠對映到宿主機node上進行埠訪問,這種埠對映方式對很多集群應用來說極不方便,如果能讓docker容器之間直接使用自己的ip位址進行通訊,會解決很多問題。按實現原理可分別直接路由方式、橋接方式(如pipework)、overlay隧道方式(如flannel、ovs+gre)等,雖然這些方案在實現細節上存在很多差異,但其思路無非分為兩種: 二層vlan網路和overlay網路簡單來說,二層vlan網路解決跨主機通訊的思路是把原先的網路架構改造為互通的大二層網路,通過特定網路裝置直接路由,實現容器點到點的之間通訊。這種方案在傳輸效率上比overlay網路佔優,然而它也存在一些固有的問題。這種方法需要二層網路裝置支援,通用性和靈活性不如後者。由於通常交換機可用的vlan數量都在4000個左右,這會對容器集群規模造成限制,遠遠不能滿足公有雲或大型私有雲的部署需求; 大型資料中心部署vlan,會導致任何乙個vlan的廣播資料會在整個資料中心內氾濫,大量消耗網路頻寬,帶來維護的困難。相比之下,overlay網路是指在不改變現有網路基礎設施的前提下,通過某種約定通訊協議,把二層報文封裝在ip報文之上的新的資料格式。這樣不但能夠充分利用成熟的ip路由協議程序資料分發;而且在overlay技術中採用擴充套件的隔離標識位數,能夠突破vlan的4000數量限制支援高達16m的使用者,並在必要時可將廣播流量轉化為組播流量,避免廣播資料氾濫。因此,overlay網路實際上是目前最主流的容器跨節點資料傳輸和路由方案。其中flannel是一種基於overlay網路的跨主機容器網路解決方案,即將tcp資料報封裝在另一種網路包裡面進行路由**和通訊,flannel是coreos開發,專門用於docker多機互聯的乙個工具,讓集群中的不同節點主機建立的容器都具有全集群唯一的虛擬ip位址。
flannel+etcd方案是典型應用(以後有實際的操作後,再補充)
總結bridge網路模式實現方式是docker0網橋+veth實現通訊,而host、container模式都是"共享"方式實現,host網路模式是容器共享宿主機network namespace,continer網路模式是容器共享已存在的容器的network namespace,none模式則是網路封閉狀態。每乙個網路模式都是有用處的,bridge模式適合進行專案之間的網路隔離;host可以作為公用的共享;而container可以作為兩個關係緊密的專案的載體,例如web和db,共用乙個網路。
Docker 容器網路
所有容器建立時,預設都掛在docker0上,可以在宿主機上使用ifconfig檢視docker0網橋裝置。docker0是乙個linux bridge。docker0網路建立時預設配置了subnet 172.17.0.0 16 建立bridge docker network create drive...
容器網路(一)docker容器網路驅動
一 linux網橋和veth pair 1 linux網橋,虛擬的交換機,工作在資料鏈路層,通過學習到mac位址,將資料報 到網橋的不同埠上。2 veth pair,可以理解為一根虛擬的網線,建立veth pair後,會以兩張虛擬網絡卡的形式成對出現,在其中乙個網絡卡發出的資料報,會直接出現在與它對...
Docker容器網路 網橋
docker使用linux橋接技術與其他容器通訊,以及連線外網。安裝完docker後你應該可以看到docker0 這個網橋,這是docker預設建立的。你建立的每個容器都會通過這個網橋連線到網路。docker服務缺省會建立乙個docker0網橋 其上有乙個docker0內部介面 它在核心層連通了其他...