Docker核心技术之网络管理
一、Docker 網絡管理簡介
為什么需要Docker網絡管理
容器的網絡默認與宿主機、與其他容器都是相互隔離。
容器中可以運行一些網絡應用(如nginx、web應用、數據庫等),如果要讓外部也可以訪問這些容器內運行的網絡應用,那么就需要配置網絡來實現。
有可能有的需求下,容器不想讓它的網絡與宿主機、與其他容器隔離。
有可能有的需求下,容器根本不需要網絡。
有可能有的需求下,容器需要更高的定制化網絡(如定制特殊的集群網絡、定制容器間的局域網)。
有可能有的需求下, 容器數量特別多,體量很大的一系列容器的網絡管理如何 ……
因此容器的網絡管理是非常重要的
Docker中有哪些網絡驅動模式
bridge network 模式(網橋):默認的網絡模式。類似虛擬機的nat模式
host network 模式(主機):容器與宿主機之間的網絡無隔離,即容器直接使用宿主機網絡
None network 模式:容器禁用所有網絡。
Overlay network 模式(覆蓋網絡): 利用VXLAN實現的bridge模式
Macvlan network 模式:容器具備Mac地址,使其顯示為網絡上的物理設備
Docker網絡管理命令
查看網絡 – docker network ls
作用: ?? ?查看已經建立的網絡對象
命令格式: ?? ?docker network ls [OPTIONS]
命令參數(OPTIONS): ?? ?-f, --filter filter ? ?? ??? ?過濾條件(如 'driver=bridge’) ?? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --format string ? ?? ?格式化打印結果 ?? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --no-trunc ? ? ? ??? ?不縮略顯示 ?? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -q, --quiet ? ? ? ? ??? ? ?? ?只顯示網絡對象的ID
注意: ?? ?默認情況下,docker安裝完成后,會自動創建bridge、host、none三種網絡驅動??
命令演示:
?創建網絡 – docker network create
作用: ?? ?創建新的網絡對象
命令格式: ?? ?docker network create [OPTIONS] NETWORK
命令參數(OPTIONS): ?? ?-d, --driver string ? ? ? ??? ??? ?指定網絡的驅動(默認 "bridge") ?? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --subnet strings ? ? ? ?? ??? ?指定子網網段(如192.168.0.0/16、172.88.0.0/24) ?? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --ip-range strings ? ? ?? ??? ?執行容器的IP范圍,格式同subnet參數 ?? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --gateway strings ? ? ??? ??? ?子網的IPv4 or IPv6網關,如(192.168.0.1)
注意: ?? ?host和none模式網絡只能存在一個 ?? ?docker自帶的overlay 網絡創建依賴于docker swarm(集群負載均衡)服務 ?? ?192.168.0.0/16 等于 192.168.0.0~192.168.255.255 ? ?192.168.8.0/24 ?? ?172.88.0.0/24 等于 172.88.0.0~172.88.0.255
命令演示:
網絡刪除 – docker network rm
作用: ?? ?刪除一個或多個網絡
命令格式: ?? ?docker network rm NETWORK [NETWORK...]
命令參數(OPTIONS): ?? ?無
查看網絡詳細信息 – docker network inspect
作用: ?? ?查看一個或多個網絡的詳細信息
命令格式: ?? ?docker network inspect [OPTIONS] NETWORK [NETWORK...] ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?或者 docker inspect [OPTIONS] NETWORK [NETWORK...]
命令參數(OPTIONS): ?? ?-f, --format string ? ?? ?根據format輸出結果
使用網絡 – docker run --network
作用: ?? ?為啟動的容器指定網絡模式
命令格式: ?? ?docker run/create --network NETWORK
命令參數(OPTIONS): ?? ?無
注意: ?? ?默認情況下,docker創建或啟動容器時,會默認使用名為bridge的網絡
網絡連接與斷開 – docker network connect/disconnect
作用: ?? ?將指定容器與指定網絡進行連接或者斷開連接
命令格式: ?? ?docker network connect [OPTIONS] NETWORK CONTAINER
? ? ? ? ? ? ? ? ? ? ? ?docker network disconnect [OPTIONS] NETWORK CONTAINER
命令參數(OPTIONS): ?? ?-f, --force ? ?? ??? ?強制斷開連接(用于disconnect)
二、Docker網絡模式簡介
bridge 網絡模式(一)
特點: 宿主機上需要單獨的bridge網卡,如默認docker默認創建的docker0。
容器之間、容器與主機之間的網絡通信,是借助為每一個容器生成的一對veth pair虛擬網絡設備對,進行通信的。一個在容器上,另一個在宿主機上。
每創建一個基于bridge網絡的容器,都會自動在宿主機上創建一個veth**虛擬網絡設備。
外部無法直接訪問容器。需要建立端口映射才能訪問。
容器借由veth虛擬設備通過如docker0這種bridge網絡設備進行通信。
每一容器具有單獨的IP
bridge 網絡模式(二) – 端口映射
作用: ?? ?啟動的容器時,為容器進行端口映射
命令格式: ?? ?docker run/create -P … ? ? ? 或者 docker run/create –p …
命令參數(OPTIONS): ?? ?-P, --publish-all?? ??? ?將容器內部所有暴露端口進行隨機映射 ?? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -p, --publish list ?? ?手動指定端口映射
注意: ?? ?-p [HOST_IP]:[HOST_PORT]:CONTAINER_PORT ?? ?
? ? ? ? ? ? ? ? 如:-p ::80?? ??? ?將容器的80端口隨機(端口)映射到宿主機任意IP ?? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?-p :8000:6379 ?? ?將容器的6379端口映射到宿主機任意IP的8000端口 ?? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?-p 192.168.5.1::3306?? ?將容器的3306端口隨機(端口)映射到宿主機的192.168.5.1IP上
host 網絡模式
特點:
容器完全共享宿主機的網絡。網絡沒有隔離。宿主機的網絡就是容器的網絡。
容器、主機上的應用所使用的端口不能重復。例如:如果宿主機已經占用了8090端口,那么任何一個host模式的容器都不可以使用8090端口了;反之同理。
外部可以直接訪問容器,不需要端口映射。
容器的IP就是宿主機的IP
特殊host 網絡模式(Container網絡模式)
Container網絡模式,其實就是容器共享其他容器的網絡。
相當于該容器,,在網絡層面上,將其他容器作為“主機”。它們之間的網絡沒有隔離。
這些容器之間的特性同host模式。
使用方法: ?? ?Docker run/create --network container:CONTAINER …
none 網絡模式
特點:
容器上沒有網絡,也無任何網絡設備。
如果需要使用網絡,需要用戶自行安裝與配置。
應用場景
該模式適合需要高度定制網絡的用戶使用。
overlay 網絡模式(一)
Overlay 網絡,也稱為覆蓋網絡。
Overlay 網絡的實現方式和方案有多種。Docker自身集成了一種,基于VXLAN隧道技術實現。
Overlay 網絡主要用于實現跨主機容器之間的通信。
應用場景:需要管理成百上千個跨主機的容器集群的網絡時。
overlay 網絡模式(二)- 了解TCP/IP協議棧
overlay 網絡模式(三)- 實現原理
IP隧道網絡原理
macvlan 網絡模式
macvlan網絡模式,最主要的特征就是他們的通信會直接基于mac地址進行轉發。
這時宿主機其實充當一個二層交換機。Docker會維護著一個MAC地址表,當宿主機網絡收到一個數據包后,直接根據mac地址找到對應的容器,再把數據交給對應的容器。
容器之間可以直接通過IP互通,通過宿主機上內建的虛擬網絡設備(創建macvlan網絡時自動創建),但與主機無法直接利用IP互通。
應用場景:由于每個外來的數據包的目的mac地址就是容器的mac地址,這時每個容器對于外面網絡來說就相當于一個真實的物理網絡設備。因此當需要讓容器來的網絡看起來是一個真實的物理機時,使用macvlan模式
三、總結
重點掌握: bridge網絡、host網絡、Container網絡模式的原理和使用(應用得較多,且host網絡性能最優)。 docker network命令的使用
了解: none網絡的效果 overlay網絡、macvlan網絡的原理。(使用起來難度較大)
總結
以上是生活随笔為你收集整理的Docker核心技术之网络管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker核心技术之容器与镜像深入了解
- 下一篇: Kafka入门教程与详解