Docker容器網(wǎng)絡(luò)基礎(chǔ)概述
開(kāi)放容器端口
當(dāng)使用docker create
或者docker run
創(chuàng)建并運(yùn)行一個(gè)容器的時(shí)候,默認(rèn)不會(huì)開(kāi)放容器端口。
可以使用--publish
或者-p
選項(xiàng)來(lái)開(kāi)放容器的端口,這時(shí)Docker就會(huì)創(chuàng)建一條防火墻規(guī)則,將宿主機(jī)的端口和容器的端口關(guān)聯(lián)起來(lái),宿主機(jī)的這個(gè)端口接收和發(fā)出的所有數(shù)據(jù)都會(huì)被轉(zhuǎn)發(fā)到容器的端口中,這樣的話外界或者宿主機(jī)上的其他容器和進(jìn)程就可以通過(guò)宿主機(jī)的端口訪問(wèn)容器的端口。
將容器的端口開(kāi)放其實(shí)是一種不安全的行為,如果只是想讓同一臺(tái)宿主機(jī)之間的容器可以通過(guò)網(wǎng)絡(luò)相互通信的話,不需要開(kāi)放它們的端口,只需要借助Docker網(wǎng)絡(luò)(Docker Network)即可。
Docker網(wǎng)絡(luò)(Docker Network)
Docker可以創(chuàng)建各種類(lèi)型的虛擬網(wǎng)絡(luò),例如可以是bridge網(wǎng)絡(luò),也可以是overlay網(wǎng)絡(luò)等等。
可以通過(guò)docker network
創(chuàng)建、查看當(dāng)前宿主機(jī)上的Docker Network,讓一個(gè)容器加入Docker Network等等。
一個(gè)容器可以加入多個(gè)Docker Network。
容器在Docker網(wǎng)絡(luò)中的IP地址和hostname
默認(rèn)情況下,當(dāng)一個(gè)容器加入了一個(gè)Docker Network之后,Docker會(huì)自動(dòng)分配給這個(gè)容器一個(gè)IP地址。也可以在容器加入Docker Network的時(shí)候,指定一個(gè)ip地址給它。
容器的hostname默認(rèn)是該容器的ID。也可以在容器加入Docker Network的時(shí)候指定一個(gè)hostname給它。
DNS服務(wù)
默認(rèn)情況下,Docker會(huì)通過(guò)bind mount的方式把宿主機(jī)的\etc\resolv.conf
掛載到每一個(gè)容器中去。因此,每一個(gè)容器的DNS配置都和宿主機(jī)的是一樣的。
如果容器加入的是用戶通過(guò)docker network create
創(chuàng)建出來(lái)的自定義網(wǎng)絡(luò),那么容器將會(huì)使用的Docker內(nèi)置的DNS服務(wù)器,內(nèi)置的DNS服務(wù)器將會(huì)把外部IP地址的查找轉(zhuǎn)發(fā)給宿主機(jī)上配置的DNS服務(wù)器。
也可以在docker create
或者docker run
的時(shí)候指定容器的DNS配置。
需要注意的是:容器并不會(huì)共享宿主機(jī)上的\etc\hosts
文件,可以在運(yùn)行docker run
時(shí)指定要加入容器的\etc\hosts
文件中的內(nèi)容。
Docker Network Drivers
Docker支持以下不同類(lèi)型的Docker Network:
Network Driver | Descript |
---|---|
bridge | 使用docker network create創(chuàng)建網(wǎng)絡(luò)時(shí)創(chuàng)建出來(lái)的默認(rèn)網(wǎng)絡(luò)類(lèi)型。當(dāng)同一臺(tái)宿主機(jī)上的多個(gè)容器之間需要相互通信的時(shí)候,通常會(huì)使用這種網(wǎng)絡(luò)。在這種網(wǎng)絡(luò)中的容器無(wú)法和宿主機(jī)以及別的網(wǎng)絡(luò)的容器進(jìn)行通信 |
host | 將宿主機(jī)和容器之間相連接的網(wǎng)絡(luò)類(lèi)型,容器可以直接使用宿主機(jī)的網(wǎng)絡(luò) |
overlay | 將多個(gè)Docker daemon連接在一起,允許Swarm服務(wù)和容器跨節(jié)點(diǎn)(主機(jī))進(jìn)行網(wǎng)絡(luò)通信 |
ipvlan | 這種網(wǎng)絡(luò)允許用戶對(duì)IPv4和IPv6的尋址有著完全的控制 |
macvlan | 允許將一個(gè)MAC地址分配給容器,Docker daemon會(huì)根據(jù)容器的MAC地址對(duì)數(shù)據(jù)進(jìn)行路由。一般來(lái)說(shuō)這種類(lèi)型的網(wǎng)絡(luò)用于部署那些古老的遺留應(yīng)用程序,這些程序面向的是物理網(wǎng)絡(luò)開(kāi)發(fā),而不是網(wǎng)絡(luò)協(xié)議棧 |
none | 將一個(gè)容器和宿主機(jī)以及其他容器完全隔離開(kāi)來(lái)的網(wǎng)絡(luò)類(lèi)型,這種網(wǎng)絡(luò)在Swarm服務(wù)中不可使用 |
代理服務(wù)器
可以給Docker Client或者Docekr Daemon設(shè)置代理服務(wù)器(proxy server)。
包過(guò)濾
當(dāng)把某一個(gè)容器的端口開(kāi)放了之后,為了安全起見(jiàn)一般會(huì)需要對(duì)這個(gè)端口的數(shù)據(jù)包進(jìn)行過(guò)濾。在Linux中,Docker是通過(guò)iptables
規(guī)則來(lái)進(jìn)行包過(guò)濾的。
Docker會(huì)在iptables
中插入兩條iptables chain,分別叫做DOCKER-USER
和DOCKER
,并且會(huì)保證所有的網(wǎng)絡(luò)包都會(huì)先通過(guò)這兩個(gè)chain的檢查,它們都屬于FORWARD
chain的一部分。
所有容器的iptables
規(guī)則都會(huì)被自動(dòng)加入到DOCKER
chain中。
不要手動(dòng)添加或修改或刪除DOCKER
chain中的內(nèi)容,但是可以向DOCKER-USER
chain中添加規(guī)則,這些規(guī)則會(huì)比DOCKER
chain中的規(guī)則優(yōu)先級(jí)更高。事實(shí)上,Docker總會(huì)保證在FORWARD
chain中,DOCKER-USER
chain的優(yōu)先級(jí)是最高的,其次就是DOCKER
chain,其他的iptables chain中的規(guī)則,不管是手動(dòng)添加的,還是防火墻添加的,優(yōu)先級(jí)都不會(huì)比它們兩個(gè)高。
防火墻
如果運(yùn)行Docker的系統(tǒng)使用了firewalld
并且開(kāi)啟了--iptables
,Docker就會(huì)自動(dòng)創(chuàng)建一個(gè)名為docker
的firewalld
zone,并把所有由Docker創(chuàng)建的網(wǎng)絡(luò)接口(例如docker0
)放入到這個(gè)zone里面。
Debian和Ubuntu自帶的防火墻ufw
使用的是iptables
里面的INPUT
和OUTPUT
chain,而Docker會(huì)在nat
表中處理容器的網(wǎng)絡(luò)流量,因此Docker容器的流量實(shí)際上并不會(huì)經(jīng)過(guò)ufw
的過(guò)濾。
參考 https://docs.docker.com/network/
以上就是Docker容器網(wǎng)絡(luò)基礎(chǔ)概述的詳細(xì)內(nèi)容,更多關(guān)于Docker容器網(wǎng)絡(luò)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Docker容器網(wǎng)絡(luò)配置全攻略之橋接、Host、container詳解
- docker修改容器網(wǎng)絡(luò)舉例詳解
- Docker容器網(wǎng)絡(luò)互聯(lián)的項(xiàng)目實(shí)踐
- Docker容器網(wǎng)絡(luò)地址的創(chuàng)建修改
- Docker容器網(wǎng)絡(luò)更改的實(shí)現(xiàn)
- docker 容器網(wǎng)絡(luò)模式詳解
- Docker容器網(wǎng)絡(luò)端口配置過(guò)程詳解
- docker之點(diǎn)到點(diǎn)的容器網(wǎng)絡(luò)的配置
- Docker中的容器網(wǎng)絡(luò)以及其配置說(shuō)明
相關(guān)文章
Docker部署Logstash同步Mysql數(shù)據(jù)到ES方式
本文介紹了如何搭建ELK(Elasticsearch, Logstash, Kibana)日志系統(tǒng),包括配置文件準(zhǔn)備、Logstash與Elasticsearch部署、驅(qū)動(dòng)文件準(zhǔn)備、配置文件編輯、容器操作以及日志查看等步驟,文章內(nèi)容是作者的個(gè)人經(jīng)驗(yàn)分享2024-10-10Docker簡(jiǎn)單安裝與應(yīng)用入門(mén)教程
這篇文章主要介紹了Docker簡(jiǎn)單安裝與應(yīng)用,結(jié)合實(shí)例形式分析了Docker常見(jiàn)的安裝、應(yīng)用構(gòu)建、終端訪問(wèn)等操作相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2018-06-06Centos8無(wú)法安裝docker問(wèn)題的解決方法
這篇文章主要給大家介紹了關(guān)于Centos8無(wú)法安裝docker問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Docker for windows pull鏡像文件的安裝位置改變的方法
這篇文章主要介紹了Docker for windows pull鏡像文件的安裝位置改變的方法的相關(guān)資料,需要的朋友可以參考下2016-12-12Docker中數(shù)據(jù)卷(volume)管理的兩種方式
數(shù)據(jù)卷有兩種形式,一種是容器中的某個(gè)目錄,它可以被別的容器引用,只要有一個(gè)容器引用了這個(gè)數(shù)據(jù)卷,數(shù)據(jù)就不會(huì)被刪除;另一種數(shù)據(jù)卷是將容器中的數(shù)據(jù)卷和宿主機(jī)的目錄進(jìn)行掛載。 數(shù)據(jù)卷可以在多個(gè)容器之間共享,修改數(shù)據(jù)卷不會(huì)影響鏡像2021-07-07Docker?搭建?RabbitMQ的詳細(xì)過(guò)程
在現(xiàn)代微服務(wù)與分布式架構(gòu)中,RabbitMQ?是一款成熟的開(kāi)源消息隊(duì)列中間件,提供了可靠的消息投遞、豐富的路由策略和管理插件,本文將詳細(xì)介紹Docker?搭建?RabbitMQ的過(guò)程,感興趣的朋友一起看看吧2025-04-04Docker如何解決tomcat容器啟動(dòng)成功,無(wú)法訪問(wèn)的問(wèn)題
這篇文章主要介紹了Docker如何解決tomcat容器啟動(dòng)成功,無(wú)法訪問(wèn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07Docker下MySQL配置文件不生效的解決方法(超全面!)
在Docker中運(yùn)行MySQL并遇到需要調(diào)整配置的情況時(shí),比如想要關(guān)閉ONLY_FULL_GROUP_BY的嚴(yán)格模式,我們可以通過(guò)以下步驟來(lái)實(shí)現(xiàn)sql_mode的修改:以下是解決此類(lèi)問(wèn)題的步驟和思路,需要的朋友可以參考下2024-09-09