Docker網(wǎng)絡(luò)

當你開始大規(guī)模使用docker時跨晴,你會發(fā)現(xiàn)需要了解很多關(guān)于網(wǎng)絡(luò)的知識蓖谢。docker作為目前最火的輕量級容器技術(shù)标锄,有很多令人稱道的功能顽铸,如docker的鏡像管理。然而料皇,docker同樣有著很多不完善的地方谓松,網(wǎng)絡(luò)方面就是Docker比較薄弱的部分簸淀。因此,作為一名運維工程師有必要深入了解docker的網(wǎng)絡(luò)知識毒返,以滿足更高的網(wǎng)絡(luò)需求租幕。作為一名微服開發(fā)工程師,簡單了解docker網(wǎng)絡(luò)環(huán)節(jié)即可拧簸。
這里我們先介紹Docker自身的3種local網(wǎng)絡(luò)工作方式劲绪,然后介紹一些docker自定義網(wǎng)絡(luò)模式。
docker安裝后會自動創(chuàng)建3種網(wǎng)絡(luò):bridge盆赤,host贾富,none,

docker network ls

docker網(wǎng)絡(luò)理論部分

docker使用Linux橋接網(wǎng)卡牺六,在宿主機虛擬一個docker容器網(wǎng)橋(docker0)颤枪,docker啟動一個容器時會根據(jù)docker網(wǎng)橋的網(wǎng)段分配給容器一個IP地址,稱為Container-IP淑际,同時docker網(wǎng)橋是每個容器的默認網(wǎng)關(guān)畏纲。因為在同一宿主機內(nèi)的容器都接入同一個網(wǎng)橋,這樣容器之間就能夠通過容器的Container-IP直接通信春缕。
docker網(wǎng)橋是宿主機虛擬出來的盗胀,并不是真實存在的網(wǎng)絡(luò)設(shè)備,外部網(wǎng)絡(luò)是無法尋址到的锄贼,這也意味著外部網(wǎng)絡(luò)無法通過直接Container-IP訪問到容器票灰。如果容器希望外部訪問能夠訪問到,可以通過映射容器端口到宿主主機(端口映射)宅荤,即docker run創(chuàng)建容器時候通過 -p 或 -P 參數(shù)來啟用屑迂,訪問容器的時候就通過[宿主機IP]:[容器端口]訪問容器。

使用命令查看docker網(wǎng)絡(luò)部分 
docker info

網(wǎng)絡(luò)模式

image.png

bridge模式

默認的網(wǎng)絡(luò)模式冯键。bridge模式下容器沒有一個公有ip,只有宿主機可以直接訪問惹盼,外部主機是不可見的,但容器通過宿主機的NAT規(guī)則后可以訪問外網(wǎng)琼了。

Bridge 橋接模式的實現(xiàn)步驟主要如下:

1)Docker Daemon 利用 veth pair 技術(shù)逻锐,在宿主機上創(chuàng)建兩個虛擬網(wǎng)絡(luò)接口設(shè)備,假設(shè)為veth0 和veth1雕薪。而veth pair 技術(shù)的特性可以保證無論哪一個 veth 接收到網(wǎng)絡(luò)報文昧诱,都會將報文傳輸給另一方。
2)Docker Daemon 將 veth0 附加到 Docker Daemon 創(chuàng)建的 docker0網(wǎng)橋上所袁。保證宿主機的網(wǎng)絡(luò)報文可以發(fā)往 veth0盏档;
3)Docker Daemon 將 veth1 添加到 Docker Container 所屬的 namespace 下,并被改名為eth0燥爷。如此一來蜈亩,保證宿主機的網(wǎng)絡(luò)報文若發(fā)往 veth0懦窘,則立即會被 eth0 接收,實現(xiàn)宿主機到Docker Container網(wǎng)絡(luò)的聯(lián)通性稚配;同時畅涂,也保證 Docker Container 單獨使用 eth0,實現(xiàn)容器網(wǎng)絡(luò)環(huán)境的隔離性道川。

Bridge橋接模式的缺陷:

1)最明顯的是午衰,該模式下 Docker Container 不具有一個公有 IP,即和宿主機的 eth0 不處于同一個網(wǎng)段冒萄。導(dǎo)致的結(jié)果是宿主機以外的世界不能直接和容器進行通信臊岸。
2)雖然 NAT 模式經(jīng)過中間處理實現(xiàn)了這一點,但是 NAT 模式仍然存在問題與不便尊流,如:容器均需要在宿主機上競爭端口帅戒,容器內(nèi)部服務(wù)的訪問者需要使用服務(wù)發(fā)現(xiàn)獲知服務(wù)的外部端口等。
3)另外 NAT 模式由于是在三層網(wǎng)絡(luò)上的實現(xiàn)手段崖技,故肯定會影響網(wǎng)絡(luò)的傳輸效率逻住。

注意:

veth設(shè)備是成雙成對出現(xiàn)的,一端是容器內(nèi)部命名為eth0响疚,一端是加入到網(wǎng)橋并命名的veth(通常命名為veth)鄙信,它們組成了一個數(shù)據(jù)傳輸通道瞪醋,一端進一端出忿晕,veth設(shè)備連接了兩個網(wǎng)絡(luò)設(shè)備并實現(xiàn)了數(shù)據(jù)通信

host模式

相當于Vmware中的NAT模式,與宿主機在同一個網(wǎng)絡(luò)中银受,但沒有獨立IP地址践盼。
如果啟動容器的時候使用host模式,那么這個容器將不會獲得一個獨立的Network Namespace宾巍,而是和宿主機共用一個Network Namespace咕幻。容器將不會虛擬出自己的網(wǎng)卡,配置自己的IP等顶霞,而是使用宿主機的IP和端口肄程。但是,容器的其他方面选浑,如文件系統(tǒng)蓝厌、進程列表等還是和宿主機隔離的。
使用host模式的容器可以直接使用宿主機的IP地址與外界通信古徒,容器內(nèi)部的服務(wù)端口也可以使用宿主機的端口拓提,不需要進行NAT,host最大的優(yōu)勢就是網(wǎng)絡(luò)性能比較好隧膘,但是docker host上已經(jīng)使用的端口就不能再用了代态,網(wǎng)絡(luò)的隔離性不好寺惫。
host網(wǎng)絡(luò)模式需要在容器創(chuàng)建時指定–network=host
host 模式是 bridge 橋接模式很好的補充。采用 host 模式的 Docker Container蹦疑,可以直接使用宿主機的 IP地址與外界進行通信西雀,若宿主機的 eth0 是一個公有 IP,那么容器也擁有這個公有IP歉摧。同時容器內(nèi)服務(wù)的端口也可以使用宿主機的端口蒋搜,無需額外進行 NAT 轉(zhuǎn)換。
host模式可以讓容器共享宿主機網(wǎng)絡(luò)棧,這樣的好處是外部主機與容器直接通信,但是容器的網(wǎng)絡(luò)缺少隔離性判莉。

Host 網(wǎng)絡(luò)模式的缺陷:

最明顯的是 Docker Container 網(wǎng)絡(luò)環(huán)境隔離性的弱化豆挽。即容器不再擁有隔離、獨立的網(wǎng)絡(luò)環(huán)境券盅。
另外帮哈,使用 host 模式的 Docker Container 雖然可以讓容器內(nèi)部的服務(wù)和傳統(tǒng)情況無差別、無改造的使用锰镀,但是由于網(wǎng)絡(luò)隔離性的弱化娘侍,該容器會與宿主機共享競爭網(wǎng)絡(luò)棧的使用;
另外泳炉,容器內(nèi)部將不再擁有所有的端口資源憾筏,原因是部分端口資源已經(jīng)被宿主機本身的服務(wù)占用,還有部分端口已經(jīng)用以 bridge 網(wǎng)絡(luò)模式容器的端口映射花鹅。

Container網(wǎng)絡(luò)模式

一種特殊host 網(wǎng)絡(luò)模式

Container 網(wǎng)絡(luò)模式是 Docker 中一種較為特別的網(wǎng)絡(luò)的模式氧腰。在容器創(chuàng)建時使用–network=container:vm1指定。(vm1指定的是運行的容器名)
處于這個模式下的 Docker 容器會共享一個網(wǎng)絡(luò)環(huán)境,這樣兩個容器之間可以使用localhost高效快速通信刨肃。
缺陷:它并沒有改善容器與宿主機以外世界通信的情況(和橋接模式一樣古拴,不能連接宿主機以外的其他設(shè)備)。
這個模式指定新創(chuàng)建的容器和已經(jīng)存在的一個容器共享一個 Network Namespace真友,而不是和宿主機共享黄痪。新創(chuàng)建的容器不會創(chuàng)建自己的網(wǎng)卡,配置自己的 IP盔然,而是和一個指定的容器共享 IP桅打、端口范圍等。同樣愈案,兩個容器除了網(wǎng)絡(luò)方面挺尾,其他的如文件系統(tǒng)、進程列表等還是隔離的刻帚。兩個容器的進程可以通過lo 網(wǎng)卡設(shè)備通信潦嘶。

none模式

使用none模式,Docker容器擁有自己的Network Namespace,但是掂僵,并不為Docker容器進行任何網(wǎng)絡(luò)配置航厚。也就是說,這個Docker容器沒有網(wǎng)卡锰蓬、IP幔睬、路由等信息。需要我們自己為Docker容器添加網(wǎng)卡芹扭、配置IP等麻顶。
這種網(wǎng)絡(luò)模式下容器只有l(wèi)o回環(huán)網(wǎng)絡(luò),沒有其他網(wǎng)卡舱卡。none模式可以在容器創(chuàng)建時通過--network=none來指定辅肾。這種類型的網(wǎng)絡(luò)沒有辦法聯(lián)網(wǎng),封閉的網(wǎng)絡(luò)能很好的保證容器的安全性轮锥。

overlay網(wǎng)絡(luò)模式

Overlay 網(wǎng)絡(luò)矫钓,也稱為覆蓋網(wǎng)絡(luò)。主要用于docker集群部署舍杜。
Overlay 網(wǎng)絡(luò)的實現(xiàn)方式和方案有多種新娜。Docker自身集成了一種,基于VXLAN隧道技術(shù)實現(xiàn)既绩。
Overlay 網(wǎng)絡(luò)主要用于實現(xiàn)跨主機容器之間的通信概龄。
應(yīng)用場景:需要管理成百上千個跨主機的容器集群的網(wǎng)絡(luò)時

macvlan網(wǎng)絡(luò)模式

macvlan網(wǎng)絡(luò)模式,最主要的特征就是他們的通信會直接基于mac地址進行轉(zhuǎn)發(fā)饲握。
這時宿主機其實充當一個二層交換機私杜。Docker會維護著一個MAC地址表,當宿主機網(wǎng)絡(luò)收到一個數(shù)據(jù)包后互拾,直接根據(jù)mac地址找到對應(yīng)的容器歪今,再把數(shù)據(jù)交給對應(yīng)的容器。
容器之間可以直接通過IP互通颜矿,通過宿主機上內(nèi)建的虛擬網(wǎng)絡(luò)設(shè)備(創(chuàng)建macvlan網(wǎng)絡(luò)時自動創(chuàng)建),但與主機無法直接利用IP互通嫉晶。
應(yīng)用場景:由于每個外來的數(shù)據(jù)包的目的mac地址就是容器的mac地址骑疆,這時每個容器對于外面網(wǎng)絡(luò)來說就相當于一個真實的物理網(wǎng)絡(luò)設(shè)備。因此當需要讓容器來的網(wǎng)絡(luò)看起來是一個真實的物理機時替废,使用macvlan模式箍铭。
Macvlan是一個新的嘗試,是真正的網(wǎng)絡(luò)虛擬化技術(shù)的轉(zhuǎn)折點椎镣。Linux實現(xiàn)非常輕量級诈火,因為與傳統(tǒng)的Linux Bridge隔離相比,它們只是簡單地與一個Linux以太網(wǎng)接口或子接口相關(guān)聯(lián)状答,以實現(xiàn)網(wǎng)絡(luò)之間的分離和與物理網(wǎng)絡(luò)的連接冷守。
Macvlan提供了許多獨特的功能刀崖,并有充足的空間進一步創(chuàng)新與各種模式。這些方法的兩個高級優(yōu)點是繞過Linux網(wǎng)橋的正面性能以及移動部件少的簡單性拍摇。刪除傳統(tǒng)上駐留在Docker主機NIC和容器接口之間的網(wǎng)橋留下了一個非常簡單的設(shè)置亮钦,包括容器接口,直接連接到Docker主機接口充活。由于在這些情況下沒有端口映射蜂莉,因此可以輕松訪問外部服務(wù)。
Macvlan Bridge模式每個容器都有唯一的MAC地址混卵,用于跟蹤Docker主機的MAC到端口映射映穗。Macvlan驅(qū)動程序網(wǎng)絡(luò)連接到父Docker主機接口。示例是物理接口幕随,例如eth0男公,用于802.1q VLAN標記的子接口eth0.10(.10代表VLAN 10)或甚至綁定的主機適配器,將兩個以太網(wǎng)接口捆綁為單個邏輯接口合陵。 指定的網(wǎng)關(guān)由網(wǎng)絡(luò)基礎(chǔ)設(shè)施提供的主機外部枢赔。 每個Macvlan Bridge模式的Docker網(wǎng)絡(luò)彼此隔離,一次只能有一個網(wǎng)絡(luò)連接到父節(jié)點拥知。
每個主機適配器有一個理論限制踏拜,每個主機適配器可以連接一個Docker網(wǎng)絡(luò)。 同一子網(wǎng)內(nèi)的任何容器都可以與沒有網(wǎng)關(guān)的同一網(wǎng)絡(luò)中的任何其他容器進行通信macvlan bridge低剔。 相同的docker network命令適用于vlan驅(qū)動程序速梗。 在Macvlan模式下,在兩個網(wǎng)絡(luò)/子網(wǎng)之間沒有外部進程路由的情況下襟齿,單獨網(wǎng)絡(luò)上的容器無法互相訪問姻锁。這也適用于同一碼頭網(wǎng)絡(luò)內(nèi)的多個子網(wǎng)。

基礎(chǔ)鏡像

# 拉取鏡像
docker pull nginx:1.19.3-alpine

# 備份鏡像
docker save nginx:1.19.3-alpine -o nginx.1.19.3.alpine.tar

# 導(dǎo)入鏡像
docker load -i nginx.1.19.3.alpine.tar

bridge網(wǎng)絡(luò)

學習docker的bridge網(wǎng)絡(luò)猜欺,bridge網(wǎng)絡(luò)表現(xiàn)形式就是docker0這個網(wǎng)絡(luò)接口位隶。容器默認都是通過docker0這個接口進行通信。也可以通過docker0去和本機的以太網(wǎng)接口連接开皿,這樣容器內(nèi)部才能訪問互聯(lián)網(wǎng)涧黄。

# 查看docker0網(wǎng)絡(luò),在默認環(huán)境中赋荆,一個名為docker0的linux bridge自動被創(chuàng)建好了笋妥,其上有一個 docker0 內(nèi)部接口,IP地址為172.17.0.1/16 
ip a 

# 查看docker 網(wǎng)絡(luò) 
docker network ls 

# 查看bridge網(wǎng)絡(luò)詳情窄潭。主要關(guān)注Containers節(jié)點信息春宣。 
docker network inspect bridge
docker0詳解

運行鏡像

docker run -itd --name nginx1 nginx:1.19.3-alpine 
查看bridge網(wǎng)絡(luò)詳情。主要關(guān)注Containers節(jié)點信息。發(fā)現(xiàn)nginx1容器默認使用bridge網(wǎng)絡(luò) 
docker network inspect bridge

容器創(chuàng)建時IP地址的分配

查看docker100主機網(wǎng)絡(luò)月帝。發(fā)現(xiàn)多出一塊網(wǎng)卡veth62aef5e@if8 
ip a

Docker創(chuàng)建一個容器的時候躏惋,會執(zhí)行如下操作:
1)創(chuàng)建一對虛擬接口/網(wǎng)卡,也就是veth pair嫁赏,分別放到本地主機和新容器中其掂;
2)本地主機一端橋接到默認的 docker0 或指定網(wǎng)橋上,并具有一個唯一的名字潦蝇,如 vetha596da4款熬;
3)容器一端放到新容器中,并修改名字作為 eth0攘乒,這個網(wǎng)卡/接口只在容器的名字空間可見贤牛;
4)從網(wǎng)橋可用地址段中(也就是與該bridge對應(yīng)的network)獲取一個空閑地址分配給容器的 eth0,并配置默認路由到橋接網(wǎng)卡 vetha596da4则酝。
完成這些之后殉簸,容器就可以使用 eth0 虛擬網(wǎng)卡來連接其他容器和其他網(wǎng)絡(luò)。
如果不指定--network沽讹,創(chuàng)建的容器默認都會掛到 docker0 上般卑,使用本地主機上 docker0 接口的 IP 作為所有容器的默認網(wǎng)關(guān)。

# 第一種方式: 
docker exec -it nginx1 sh 
ip a 

# 第二種方式: 
docker exec -it nginx1 ip a

安裝brctl

yum install -y bridge-utils

運行命令

brctl show
image.png
多容器之間通訊
docker run -itd --name nginx1 nginx:1.19.3-alpine 
docker run -itd --name nginx2 nginx:1.19.3-alpine 

docker network inspect bridge 

docker exec -it nginx1 sh 
ping 172.17.0.2 

docker exec -it nginx2 sh 
ping 172.17.0.2 

ping www.baidu.com 
ping nginx1
容器IP地址會發(fā)生變化
docker stop nginx1 nginx2 

# 先啟動nginx2爽雄,在啟動nginx1 
docker start nginx2 
docker start nginx1 

docker network inspect bridge
link容器

學習docker run命令的link參數(shù)
--link=[]: 添加鏈接到另一個容器蝠检;不推薦使用該參數(shù)
使用link的場景:在企業(yè)開發(fā)環(huán)境中,我們有一個mysql的服務(wù)的容器mysql_1挚瘟,還有一個web應(yīng)用程序web_1叹谁,肯定web_1這臺容器肯定要連接mysql_1這個數(shù)據(jù)庫。前面網(wǎng)絡(luò)命名空間的知識告訴我們乘盖,兩個容器需要能通信焰檩,需要知道對方的具體的IP地址。生產(chǎn)環(huán)境還比較好订框,IP地址很少變化析苫,但是在我們內(nèi)部測試環(huán)境,容器部署的IP地址是可能不斷變化的布蔗,所以藤违,開發(fā)人員不能在代碼中寫死數(shù)據(jù)庫的IP地址。這個時候纵揍,我們就可以利用容器之間link來解決這個問題。下面议街,我們來介紹如何通過容器名稱來進行ping泽谨,而不是通過IP地址。

docker rm -f nginx2 

docker run -itd --name nginx2 --link nginx1 nginx:1.19.3-alpine 

docker exec -it nginx2 sh 
ping 172.17.0.2
 
ping www.baidu.com 
ping nginx1

上面link命令,是在nginx2容器啟動時link到nginx1容器吧雹,因此骨杂,在nginx2容器里面可以ping通nginx1容器名,link的作用相當于添加了DNS解析雄卷。這里提醒下搓蚪,在nginx1容器里去ping nginx2容器是不通的,因為link關(guān)系是單向的丁鹉,不可逆妒潭。
實際工作中,docker官網(wǎng)已經(jīng)不推薦我們使用link參數(shù)揣钦。
docker用其他方式替換掉link參數(shù)

新建bridge網(wǎng)絡(luò)
docker network create -d bridge test-bridge

上面命令參數(shù)-d 是指DRIVER的類型雳灾,后面的test-bridge是network的自定義名稱,這個和docker0是類似的冯凹。下面開始介紹谎亩,如何把容器連接到test-bridge這個網(wǎng)絡(luò)。
啟動一個nginx的容器nginx3宇姚,并通過參數(shù)network connect來連接test-bridge網(wǎng)絡(luò)匈庭。在啟動容器nginx3之前,我們查看目前還沒有容器連接到了test-bridge這個網(wǎng)絡(luò)上浑劳。

brctl show 
docker network ls 
docker network inspect test-bridge 

docker run -itd --name nginx3 --network test-bridge nginx:1.19.3-alpine 
brctl show 
docker network inspect test-bridge

把一個運行中容器連接到test-bridge網(wǎng)絡(luò)

docker network connect test-bridge nginx2 
docker network inspect test-bridge 

docker exec -it nginx2 sh 
ping nginx3 

docker exec -it nginx3 sh 
ping nginx2

自己建的網(wǎng)絡(luò)阱持,可以使用容器名來ping通,而使用默認的docker0是ping不通的

none呀洲、host網(wǎng)絡(luò)

我們先來看看none網(wǎng)絡(luò)

none網(wǎng)絡(luò)

環(huán)境準備紊选,先stop和rm掉全部之前開啟的容器。并且把前面創(chuàng)建的test-bridge網(wǎng)絡(luò)也刪除道逗。當然兵罢,更簡單的辦法是使用快照方式。將docker-100主機恢復(fù)到docker初始化安裝時滓窍。

docker rm -f $(docker ps -aq) 
docker network rm test-bridge 

docker network ls

啟動一個ngnix的容器nginx1卖词,并且連接到none網(wǎng)絡(luò)。然后執(zhí)行docker network inspect none吏夯,看看容器信息

docker run -itd --name nginx1 --network none nginx:1.19.3-alpine 
docker network inspect none

注意此蜈,容器使用none模式,是沒有物理地址和IP地址噪生。我們可以進入到nginx1容器里裆赵,執(zhí)行ip a命令看看。只有一個lo接口跺嗽,沒有其他網(wǎng)絡(luò)接口战授,沒有IP页藻。也就是說,使用none模式植兰,這個容器是不能被其他容器訪問份帐。這種使用場景很少,只有項目安全性很高的功能才能使用到楣导。例如:密碼加密算法容器废境。

docker exec -it nginx1 sh 
ip a
host網(wǎng)絡(luò)

前面學習none網(wǎng)絡(luò)模式特點就是,容器沒有IP地址筒繁,不能和其他容器通信噩凹。下面來看看host網(wǎng)絡(luò)是什么特點。我們使用前面命令膝晾,啟動一個nginx的nginx2容器栓始,連接到host網(wǎng)絡(luò)。然后docker network inspect host, 看看容器信息血当。

docker run -itd --name nginx2 --network host nginx:1.19.3-alpine 
docker network inspect host

這里來看幻赚,也不顯示IP地址。那么是不是和none一樣臊旭,肯定不是落恼,不然也不會設(shè)計none和host網(wǎng)絡(luò)進行區(qū)分。下面我們進入nginx2容器离熏,執(zhí)行ip a看看效果佳谦。我們在容器里執(zhí)行ip a,發(fā)現(xiàn)打印內(nèi)容和在linux本機外執(zhí)行ip a是一樣的滋戳。

docker exec -it nginx2 sh 
ip a

這說明什么呢钻蔑?容器使用了host模式,說明容器和外層linux主機共享一套網(wǎng)絡(luò)接口奸鸯。VMware公司的虛擬機管理軟件咪笑,其中網(wǎng)絡(luò)設(shè)置,也有host這個模式娄涩,作用也是一樣窗怒,虛擬機里面使用網(wǎng)絡(luò)和你自己外層機器是一模一樣的。這種容器和本機使用共享一套網(wǎng)絡(luò)接口蓄拣,缺點還是很明顯的扬虚,例如我們知道web服務(wù)器一般端口是80,共享了一套網(wǎng)絡(luò)接口球恤,那么你這臺機器上只能啟動一個nginx端口為80的服務(wù)器了辜昵。否則,出現(xiàn)端口被占用的情況咽斧。
本篇很簡單路鹰,就是簡單了解下docker中none和host網(wǎng)絡(luò)模式贷洲。學習重點還是如何使用bridge網(wǎng)絡(luò)收厨。

網(wǎng)絡(luò)命令匯總

docker network --help 

# 網(wǎng)絡(luò)常用命令匯總 
  connect Connect a container to a network 
  create Create a network 
  disconnect Disconnect a container from a network 
  inspect Display detailed information on one or more networks 
  ls List networks 
  prune Remove all unused networks 
  rm Remove one or more networks
查看網(wǎng)絡(luò)
#查看網(wǎng)絡(luò) 
– docker network ls 

# 作用:
    查看已經(jīng)建立的網(wǎng)絡(luò)對象 
# 命令格式: 
    docker network ls [OPTIONS] 
# 命令參數(shù)(OPTIONS): 
    -f, --filter filter 過濾條件(如 'driver=bridge’)
        --format string 格式化打印結(jié)果 
        --no-trunc 不縮略顯示 
    -q, --quiet 只顯示網(wǎng)絡(luò)對象的ID
# 注意:
    默認情況下晋柱,docker安裝完成后,會自動創(chuàng)建bridge诵叁、host雁竞、none三種網(wǎng)絡(luò)驅(qū)動 

# 命令演示 
docker network ls 
docker network ls --no-trunc 
docker network ls -f 'driver=host'
創(chuàng)建網(wǎng)絡(luò)
創(chuàng)建網(wǎng)絡(luò) – docker network create 
# 作用:
    創(chuàng)建新的網(wǎng)絡(luò)對象 
# 命令格式: 
    docker network create [OPTIONS] NETWORK 
# 命令參數(shù)(OPTIONS): 
    -d, --driver string 指定網(wǎng)絡(luò)的驅(qū)動(默認 "bridge") 
        --subnet strings 指定子網(wǎng)網(wǎng)段(如192.168.0.0/16、172.88.0.0/24) 
        --ip-range strings 執(zhí)行容器的IP范圍拧额,格式同subnet參數(shù) 
        --gateway strings 子網(wǎng)的IPv4 or IPv6網(wǎng)關(guān)碑诉,如(192.168.0.1) 
# 注意:
    host和none模式網(wǎng)絡(luò)只能存在一個 
    docker自帶的overlay 網(wǎng)絡(luò)創(chuàng)建依賴于docker swarm(集群負載均衡)服務(wù) 
192.168.0.0/16 等于 192.168.0.0~192.168.255.255192.168.8.0/24 
172.88.0.0/24 等于 172.88.0.0~172.88.0.255 
# 命令演示 
docker network ls 
docker network create -d bridge my-bridge 
docker network ls
網(wǎng)絡(luò)刪除
網(wǎng)絡(luò)刪除 – docker network rm 
# 作用:
    刪除一個或多個網(wǎng)絡(luò) 
# 命令格式: 
    docker network rm NETWORK [NETWORK...] 
# 命令參數(shù)(OPTIONS): 
    無
查看網(wǎng)絡(luò)詳細信息
# 查看網(wǎng)絡(luò)詳細信息 
docker network inspect 

# 作用:
    查看一個或多個網(wǎng)絡(luò)的詳細信息 
# 命令格式: 
    docker network inspect [OPTIONS] NETWORK [NETWORK...] 
      或者 docker inspect [OPTIONS] NETWORK [NETWORK...] 
# 命令參數(shù)(OPTIONS): 
    -f, --format string 根據(jù)format輸出結(jié)果
使用網(wǎng)絡(luò)
使用網(wǎng)絡(luò) – docker run –-network 

# 作用:
    為啟動的容器指定網(wǎng)絡(luò)模式 
# 命令格式: 
    docker run/create --network NETWORK 
# 命令參數(shù)(OPTIONS): 
    無 
# 注意:
    默認情況下,docker創(chuàng)建或啟動容器時侥锦,會默認使用名為bridge的網(wǎng)絡(luò)
網(wǎng)絡(luò)連接與斷開
網(wǎng)絡(luò)連接與斷開 – docker network connect/disconnect 
# 作用:
    將指定容器與指定網(wǎng)絡(luò)進行連接或者斷開連接 
# 命令格式: 
    docker network connect [OPTIONS] NETWORK CONTAINER 
    docker network disconnect [OPTIONS] NETWORK CONTAINER 
# 命令參數(shù)(OPTIONS): 
    -f, --force 強制斷開連接(用于disconnect)
使用示例
docker network create -d bridge --subnet=172.172.0.0/24 --gateway 172.172.0.1 test-network 

172.172.0.0/24: 24代表子碼掩碼是255.255.255.0 
172.172.0.0/16: 16 代表子碼掩碼255.255.0.0 

docker network ls 

docker run -itd --name nginx3 -p 80:80 --net test-network --ip 172.172.0.10 nginx:1.19.3-alpine 

--net mynetwork:選擇存在的網(wǎng)絡(luò) 
--ip 172.172.0.10:給nginx分配固定的IP地址 

docker network inspect test-network 
docker stop nginx3 

docker start nginx3 
docker network inspect test-network
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末进栽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子恭垦,更是在濱河造成了極大的恐慌快毛,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件番挺,死亡現(xiàn)場離奇詭異唠帝,居然都是意外死亡,警方通過查閱死者的電腦和手機玄柏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門襟衰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人粪摘,你說我怎么就攤上這事瀑晒。” “怎么了徘意?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵苔悦,是天一觀的道長。 經(jīng)常有香客問我映砖,道長间坐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任邑退,我火速辦了婚禮竹宋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘地技。我一直安慰自己蜈七,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布莫矗。 她就那樣靜靜地躺著飒硅,像睡著了一般砂缩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上三娩,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天庵芭,我揣著相機與錄音,去河邊找鬼雀监。 笑死双吆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的会前。 我是一名探鬼主播好乐,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瓦宜!你這毒婦竟也來了蔚万?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤临庇,失蹤者是張志新(化名)和其女友劉穎反璃,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苔巨,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡版扩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了侄泽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片礁芦。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悼尾,靈堂內(nèi)的尸體忽然破棺而出柿扣,到底是詐尸還是另有隱情,我是刑警寧澤闺魏,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布未状,位于F島的核電站,受9級特大地震影響析桥,放射性物質(zhì)發(fā)生泄漏司草。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一泡仗、第九天 我趴在偏房一處隱蔽的房頂上張望埋虹。 院中可真熱鬧,春花似錦娩怎、人聲如沸搔课。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爬泥。三九已至柬讨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間袍啡,已是汗流浹背踩官。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留葬馋,地道東北人卖鲤。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像畴嘶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子集晚,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容