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