一、概述
Docker網(wǎng)絡(luò)模型是指Docker容器在網(wǎng)絡(luò)中的通信方式和組織結(jié)構(gòu)。Docker容器通過(guò)網(wǎng)絡(luò)連接,使得容器之間可以相互通信,并與主機(jī)和外部網(wǎng)絡(luò)進(jìn)行交互。
在Docker中,有幾種不同的網(wǎng)絡(luò)模型可供選擇:
1、主機(jī)模式(Host mode):容器與主機(jī)共享網(wǎng)絡(luò)命名空間,容器中的網(wǎng)絡(luò)直接映射到主機(jī)網(wǎng)絡(luò)上。這意味著容器可以使用主機(jī)上的網(wǎng)絡(luò)配置,并且容器中的服務(wù)可以通過(guò)主機(jī)的IP地址和端口進(jìn)行訪(fǎng)問(wèn)。
2、橋接模式(Bridge mode):Docker會(huì)創(chuàng)建一個(gè)虛擬的網(wǎng)絡(luò)橋接接口,稱(chēng)為docker0,容器加入這個(gè)橋接接口后,可以通過(guò)橋接接口與其他容器和宿主機(jī)進(jìn)行通信。每個(gè)容器都分配一個(gè)唯一的IP地址,并且可以使用Docker提供的DNS服務(wù)進(jìn)行容器之間的域名解析。
3、Overlay模式(Overlay mode):用于在多個(gè)主機(jī)上創(chuàng)建一個(gè)覆蓋網(wǎng)絡(luò),允許分布式容器在不同的主機(jī)上進(jìn)行通信。此模式使用虛擬的網(wǎng)絡(luò)隧道和路由來(lái)連接不同的主機(jī)上的容器,并提供透明的跨主機(jī)通信。
4、MacVLAN模式(MacVLAN mode):此模式允許將容器直接連接到物理網(wǎng)絡(luò)上,每個(gè)容器會(huì)分配一個(gè)唯一的MAC地址,并與主機(jī)網(wǎng)絡(luò)共享IP地址。這樣容器就可以像主機(jī)上的其他設(shè)備一樣與網(wǎng)絡(luò)進(jìn)行交互。
5、None模式(None mode):在此模式下,容器不會(huì)與任何網(wǎng)絡(luò)進(jìn)行連接,完全與外部網(wǎng)絡(luò)隔離。
這些網(wǎng)絡(luò)模型可以根據(jù)應(yīng)用場(chǎng)景和要求選擇合適的模式來(lái)配置Docker容器的網(wǎng)絡(luò)連接。
二、網(wǎng)絡(luò)模型
1、主機(jī)模式(Host mode)
Docker底層使用了Linux的Namespaces技術(shù)來(lái)進(jìn)行資源隔離,如PID Namespace隔離進(jìn)程,Mount Namespace隔離文件系統(tǒng),Network Namespace隔離網(wǎng)絡(luò)等。一個(gè)Network Namespace提供了一份獨(dú)立的網(wǎng)絡(luò)環(huán)境,包括網(wǎng)卡、路由、Iptables規(guī)則等都與其他的Network Namespace隔離。一個(gè)Docker容器一般會(huì)分配一個(gè)獨(dú)立的Network Namespace。但如果啟動(dòng)容器的時(shí)候使用host模式,那么這個(gè)容器將不會(huì)獲得一個(gè)獨(dú)立的Network Namespace,而是和宿主機(jī)共用一個(gè)Root?Network Namespace。容器將不會(huì)虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機(jī)的IP和端口。出于安全考慮不推薦使用這種網(wǎng)絡(luò)模式。
我們?cè)?92.168.77.123/24的機(jī)器上用Host模式啟動(dòng)一個(gè)含有WEB應(yīng)用的Docker容器,監(jiān)聽(tīng)TCP?80端口。當(dāng)我們?cè)谌萜髦袌?zhí)行任何類(lèi)似ifconfig命令查看網(wǎng)絡(luò)環(huán)境時(shí),看到的都是宿主機(jī)上的信息。而外界訪(fǎng)問(wèn)容器中的應(yīng)用,則直接使用192.168.200.111:80即可,不用任何NAT轉(zhuǎn)換,就如直接跑在宿主機(jī)中一樣。但是,容器的其他方面,如文件系統(tǒng)、進(jìn)程列表等還是和宿主機(jī)隔離的。
docker run -itd --net=host --name=host busybox
docker exec -it host ifconfig
?
?可以看到容器和宿主機(jī)的IP是一樣的
2、container模式
這個(gè)模式可以指定新創(chuàng)建的容器和已經(jīng)存在的一個(gè)容器共享一個(gè)Network Namespace,而不是和宿主機(jī)共享。新創(chuàng)建的容器不會(huì)創(chuàng)建自己的網(wǎng)卡,配置自己的IP,而是和一個(gè)指定的容器共享IP、端口范圍等。同樣,兩個(gè)容器除了網(wǎng)絡(luò)方面,其他的如文件系統(tǒng)、進(jìn)程列表等還是隔離的。兩個(gè)容器的進(jìn)程可以通過(guò)lo網(wǎng)卡設(shè)備通信。
使用--net=container:container_id/container_name,多個(gè)容器使用共同的網(wǎng)絡(luò)看到的ip是一樣的。
docker run -itd --name=con1 busybox
docker exec -it con1 ifconfig
docker run -itd --net=container:con1 --name=con2 busybox
docker exec -it con2 ifconfig
可以看到兩個(gè)容器的IP是一樣的
3、none模式
在這種模式下,Docker容器擁有自己的Network Namespace,但是并不為Docker容器進(jìn)行任何網(wǎng)絡(luò)配置。也就是說(shuō),這個(gè)Docker容器沒(méi)有網(wǎng)卡、IP、路由等信息。需要我們自己為Docker容器添加網(wǎng)卡、配置IP等。
使用--net=none指定,這種模式下不會(huì)配置任何網(wǎng)絡(luò)。
docker run -itd --name=none --net=none busybox
docker exec -it none ifconfig
?4、bridge模式
bridge模式是Docker默認(rèn)的網(wǎng)絡(luò)設(shè)置,屬于一種NAT網(wǎng)絡(luò)模型,Docker?daemon在啟動(dòng)的時(shí)候就會(huì)建立一個(gè)docker0網(wǎng)橋(通過(guò)-b參數(shù)可以指定),每個(gè)容器使用bridge模式啟動(dòng)時(shí),Docker都會(huì)為容器創(chuàng)建一對(duì)虛擬網(wǎng)絡(luò)接口(veth?pair)設(shè)備,這對(duì)接口一端在容器的Network?Namespace,另一端在docker0,這樣就實(shí)現(xiàn)了容器與宿主機(jī)之間的通信。
????????????????????????????????????????
在bridge模式下,Docker容器與外部網(wǎng)絡(luò)通信都是通過(guò)iptables規(guī)則控制的,這也是Docker網(wǎng)絡(luò)性能低下的一個(gè)重要原因。使用iptables?-vnL?-t?nat可以查看NAT表,在Chain?Docker中可以看到容器橋接的規(guī)則。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-627108.html
?5、Overlay模式
這是Docker原生的跨主機(jī)多子網(wǎng)的網(wǎng)絡(luò)模型,當(dāng)創(chuàng)建一個(gè)新的網(wǎng)絡(luò)時(shí),Docker會(huì)在主機(jī)上創(chuàng)建一個(gè)Network Namespace,Network Namespace內(nèi)有一個(gè)網(wǎng)橋,網(wǎng)橋上有一個(gè)vxlan接口,每個(gè)網(wǎng)絡(luò)占用一個(gè)vxlan?ID,當(dāng)容器被添加到網(wǎng)絡(luò)中時(shí),Docker會(huì)分配一對(duì)veth網(wǎng)卡設(shè)備,與bridge模式類(lèi)似,一端在容器里面,另一端在本地的Network?Namespace中。
容器A、B、C都在主機(jī)A上面,而容器D、E則在主機(jī)B上面,現(xiàn)在通過(guò)Overlay網(wǎng)絡(luò)模型可以實(shí)現(xiàn)容器A、B、D處于同一個(gè)子網(wǎng),而容器C、E則處于另一個(gè)子網(wǎng)中。
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-627108.html
以上就是docker網(wǎng)絡(luò)模型
如有錯(cuò)誤歡迎各位大佬批評(píng)指正,我們共同進(jìn)步
到了這里,關(guān)于小白到運(yùn)維工程師自學(xué)之路 第六十六集 (docker 網(wǎng)絡(luò)模型)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!