日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Docker网络配置进阶

發(fā)布時(shí)間:2025/6/17 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker网络配置进阶 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Docker啟動(dòng)會(huì)默認(rèn)創(chuàng)建docker0虛擬網(wǎng)橋,是Linux的一個(gè)bridge,可以理解成一個(gè)軟件交換機(jī)。它會(huì)在掛載到它的網(wǎng)口之間進(jìn)行轉(zhuǎn)發(fā)。

?

之后所有容器都是在172.17.0.x的網(wǎng)段上,并且可以相互通訊,包括和宿主主機(jī)通訊。

當(dāng)創(chuàng)建一個(gè)Docker容器的時(shí)候,同時(shí)會(huì)創(chuàng)建一對(duì)veth?pair(虛擬設(shè)備接口)

(https://www.cnblogs.com/bakari/p/10613710.html)

接口(當(dāng)數(shù)據(jù)包發(fā)送到一個(gè)接口時(shí),另外一個(gè)接口也可以收到相同的數(shù)據(jù)包)。這對(duì)接口一端在容器內(nèi),即eth0;另一端在本地并被掛載到docker0?網(wǎng)橋,名稱以veth開(kāi)頭。通過(guò)這種方式,主機(jī)可以跟容器通信,容器之間也可以相互通信。Docker就創(chuàng)建了在主機(jī)和所有容器之間一個(gè)虛擬共享網(wǎng)絡(luò)。

大概就是書(shū)上的這個(gè)圖:

?

一些docker網(wǎng)絡(luò)相關(guān)的命令列表

-b?BRIDGE??或??--bridge=BRIDGE??指定容器掛載的網(wǎng)橋

--bip=CIDR??定制?docker0?的掩碼

-H?SOCKET...??或??--host=SOCKET...??Docker?服務(wù)端接收命令的通道

--icc=true|false??是否支持容器之間進(jìn)行通信

--iptables=true|false??是否允許?Docker?添加?iptables?規(guī)則

--mtu=BYTES??容器網(wǎng)絡(luò)中的?MTU(最大傳輸單元)

下面2個(gè)命令選項(xiàng)既可以在啟動(dòng)服務(wù)時(shí)指定,也可以在啟動(dòng)容器時(shí)指定。在?Docker服務(wù)啟動(dòng)的時(shí)候指定則會(huì)成為默認(rèn)值,后面執(zhí)行??docker?run??時(shí)可以覆蓋設(shè)置的默認(rèn)值

--dns=IP_ADDRESS...??使用指定的DNS服務(wù)器

--dns-search=DOMAIN...??指定DNS搜索域

?

最后這些選項(xiàng)只有在??docker?run??執(zhí)行時(shí)使用,因?yàn)樗轻槍?duì)容器的特性內(nèi)容。

-h?HOSTNAME??或??--hostname=HOSTNAME??配置容器主機(jī)名

--link=CONTAINER_NAME:ALIAS??添加到另一個(gè)容器的連接

--net=bridge|none|container:NAME_or_ID|host??配置容器的橋接模式

-p?SPEC??或??--publish=SPEC??映射容器端口到宿主主機(jī)

-P?or?--publish-all=true|false??映射容器所有端口到宿主主機(jī)

?

容器訪問(wèn)控制

容器訪問(wèn)控制,主要通過(guò)Linux上的iptables防火墻來(lái)進(jìn)行管理和實(shí)現(xiàn)。

容器想要訪問(wèn)外部網(wǎng)絡(luò),需要本地系統(tǒng)的轉(zhuǎn)發(fā)支持。在Linux系統(tǒng)中,檢查轉(zhuǎn)發(fā)是否打開(kāi)。

sysctl?net.ipv4.ip_forward

結(jié)果net.ipv4.ip_forward?=?1中1是打開(kāi),如果是0就是沒(méi)打開(kāi),沒(méi)打開(kāi)則用

sysctl?-w?net.ipv4.ip_forward=1命令設(shè)置成打開(kāi)。

如果在啟動(dòng)?Docker?服務(wù)的時(shí)候設(shè)定??--ip-forward=true??,?Docker?就會(huì)自動(dòng)設(shè)定系統(tǒng)的??ip_forward??參數(shù)為?1

?

容器之間的訪問(wèn)

????容器之間的訪問(wèn),需要兩方面的支持。

????1.容器的網(wǎng)絡(luò)拓?fù)涫欠褚呀?jīng)互聯(lián)。默認(rèn)情況下,所有容器都會(huì)被連接到docker0網(wǎng)橋上。

????2.本地系統(tǒng)的防火墻軟件--iptables是否允許通過(guò)。

?

訪問(wèn)所有端口

當(dāng)啟動(dòng)Docker服務(wù)(dockerd)的時(shí)候,默認(rèn)會(huì)添加一條轉(zhuǎn)發(fā)策略到本地主機(jī)iptables的FORWARD鏈上。策略為通過(guò)(ACCEPT)還是禁止(DROP)取決于配置?--icc=true(缺省值)還是--icc=false。如果手動(dòng)指定--iptables=false則不會(huì)添加iptables規(guī)則。

所以說(shuō)在默認(rèn)情況下,不同容器之間是允許網(wǎng)絡(luò)互通的。如果為了安全考慮,可以在

/etc/docker/daemon.json文件中配置{"icc":?false}來(lái)禁止。

訪問(wèn)指定端口

在通過(guò)--icc關(guān)閉網(wǎng)絡(luò)訪問(wèn)后,可以通過(guò)link選項(xiàng)來(lái)訪問(wèn)容器的開(kāi)放端口。

link=CONTAINER_NAME:ALIAS

例:

????在啟動(dòng)?Docker?服務(wù)時(shí),可以同時(shí)使用?icc=false?--iptables=true??參數(shù)來(lái)關(guān)閉允許相互的網(wǎng)絡(luò)訪問(wèn),并讓?Docker?可以修改系統(tǒng)中的??iptables??規(guī)則。

PS:????--link=CONTAINER_NAME:ALIAS??中的??CONTAINER_NAME??目前必須是Docker?分配的名字,或使用??--name??參數(shù)指定的名字。主機(jī)名則不會(huì)被識(shí)別。

?

映射容器端口到宿主主機(jī)的實(shí)現(xiàn)

????默認(rèn)情況容器可以主動(dòng)訪問(wèn)到外部網(wǎng)絡(luò),但是外部網(wǎng)絡(luò)無(wú)法訪問(wèn)到容器。

容器訪問(wèn)外部實(shí)現(xiàn)

容器所有到外部網(wǎng)絡(luò)的鏈接,源地址都會(huì)被NAT成本地系統(tǒng)的IP地址。這是使用iptables的源地址偽裝操作實(shí)現(xiàn)的。

查看主機(jī)NAT規(guī)則sudo?iptables?-t?nat?-nL

上面是所有源地址在172.17.0.0/16網(wǎng)段,目標(biāo)地址是所有0.0.0.0/0,的流量動(dòng)態(tài)偽裝成從系統(tǒng)網(wǎng)卡發(fā)出。MASQUERADE?跟傳統(tǒng)?SNAT的好處是它能動(dòng)態(tài)從網(wǎng)卡獲取地址。

?

外部訪問(wèn)容器實(shí)現(xiàn)

容器允許外部訪問(wèn),可以在docker?run?時(shí)候通過(guò)?-p?或?-P?參數(shù)來(lái)啟用。原理是在本地iptable的net表中添加相應(yīng)的規(guī)則。

比如-p?80:80可能會(huì)這樣

上面是所有地址的80都指向了容器里面的80,如果想鎖定地址可以

-p?IP:host_port:container_port??或??-p?IP::port

也可以直接配置/etc/docker/daemon.json?中?{"ip":?"0.0.0.0"}

配置docker0網(wǎng)橋

Docker服務(wù)默認(rèn)創(chuàng)建docker0?網(wǎng)橋,默認(rèn)指定了docker0接口的IP地址和子網(wǎng)掩碼,讓主機(jī)和容器之間可以通過(guò)網(wǎng)橋相互通信,還給出了MTU(接口允許接收的做大傳輸單元),或宿主主機(jī)網(wǎng)絡(luò)路由上支持的默認(rèn)值。

--bip=CIDR??IP?地址加掩碼格式,例如?192.168.1.5/24

--mtu=BYTES??覆蓋默認(rèn)的?Docker?mtu?配置

也可以在配置文件中配置?DOCKER_OPTS,然后重啟服務(wù)。

可以通過(guò)brctl?show來(lái)查看網(wǎng)橋和端口連接信息。

?

每次創(chuàng)建一個(gè)新容器的時(shí)候,Docker從可用的地址段中選擇一個(gè)空閑的IP地址分配給容器的eth0端口。使用本地主機(jī)上docker0接口的IP作為所有容器的默認(rèn)網(wǎng)關(guān)

?

自定義網(wǎng)橋

除了默認(rèn)的docker0網(wǎng)橋,用戶也可以指定網(wǎng)橋來(lái)鏈接各個(gè)容器。

啟動(dòng)docker服務(wù)的時(shí)候使用??-b?BRIDGE??或?--bridge=BRIDGE??來(lái)指定使用的網(wǎng)橋。如果服務(wù)已經(jīng)運(yùn)行,就停掉服務(wù),刪除就網(wǎng)橋。

sudo?systemctl?stop?docker

sudo?ip?link?set?dev?docker0?down

sudo?brctl?delbr?docker0

然后創(chuàng)建網(wǎng)橋

sudo?brctl?addbr?bridge0

sudo?ip?addr?add?192.168.5.1/24?dev?bridge0

sudo?ip?link?set?dev?bridge0?up

查看確認(rèn)網(wǎng)橋創(chuàng)建并啟動(dòng)

ip?addr?show?bridge0

在?Docker?配置文件??/etc/docker/daemon.json??中添加如下內(nèi)容,即可將Docker?默認(rèn)橋接到創(chuàng)建的網(wǎng)橋上{"bridge":?"bridge0",}

啟動(dòng)?Docker?服務(wù)systemctl?start?docker

新建一個(gè)服務(wù)

docker?run?-d?-P?training/webapp?python?app.py

創(chuàng)建一個(gè)點(diǎn)到點(diǎn)的連接

默認(rèn)情況下Docker會(huì)將所有容器鏈接到由docker0提供的虛擬子網(wǎng)中。但是有的時(shí)候可能需要兩個(gè)容器直接通訊,而不是通過(guò)主機(jī)網(wǎng)橋進(jìn)行橋接。方法是創(chuàng)建一對(duì)peer接口,分別放在兩個(gè)容器中,配置成點(diǎn)到點(diǎn)鏈路類型。

?

總結(jié)

以上是生活随笔為你收集整理的Docker网络配置进阶的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。