當你開始大規(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ò)模式
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
多容器之間通訊
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