日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Docker-Bridge Network 01 容器间通信

發(fā)布時(shí)間:2024/9/5 编程问答 32 如意码农
生活随笔 收集整理的這篇文章主要介紹了 Docker-Bridge Network 01 容器间通信 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本小節(jié)介紹bridge network模式下,單機(jī)上的容器網(wǎng)絡(luò)拓?fù)浼巴ㄐ拧?/p>

1.前言

點(diǎn)擊跳轉(zhuǎn)至Docker系列文章

對(duì)于單機(jī)上的容器,Docker提供了bridge、host、none三種網(wǎng)絡(luò)。我們首先介紹經(jīng)典的bridge模式。
Linux bridge是Linux內(nèi)核中廣泛使用的網(wǎng)絡(luò)虛擬化工具,在OpenStack、Docker、Kubernetes中,常常能看到它的身影。
Docker默認(rèn)使用Bridge Network。Docker安裝時(shí)會(huì)創(chuàng)建一個(gè)名為docker0的bridge,創(chuàng)建容器時(shí)如果不指定網(wǎng)絡(luò),則默認(rèn)將容器連接在docker0上,實(shí)現(xiàn)容器的網(wǎng)絡(luò)通信。

2.安裝docker,查看網(wǎng)絡(luò)變化

上一節(jié)在虛擬機(jī)上安裝了docker,我們查看虛擬機(jī)上網(wǎng)卡、路由表、網(wǎng)橋等設(shè)備的變化。

  • 網(wǎng)卡
    新增了docker0,其地址為172.17.0.1/16
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
    link/ether 08:00:27:70:b6:ef brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.11/24 brd 192.168.0.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::da96:cef:9147:bcc1/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
    link/ether 02:42:a8:64:6c:32 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
  • 路由表
    執(zhí)行route -n,docker創(chuàng)建了一條路由:發(fā)往172.17.0.0/16的報(bào)文,會(huì)走到docker0
[root@docker1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 enp0s3
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
  • 網(wǎng)橋
    執(zhí)行brctl show,發(fā)現(xiàn)docker0上還沒(méi)有interface
[root@docker1 ~]# brctl show
bridge name    bridge id       STP enabled interfaces
docker0        8000.0242a8646c32   no      
  • 網(wǎng)絡(luò)命名空間
    執(zhí)行ip netns,返回空,此時(shí)還沒(méi)有net namespace。

3.創(chuàng)建一個(gè)容器

3.1 創(chuàng)建busybox容器

busybox鏡像包含了各種linux工具,我們用該鏡像創(chuàng)建容器來(lái)做實(shí)驗(yàn)。
執(zhí)行docker run -it -d --name=bbox1 busybox

3.2 查看主機(jī)網(wǎng)絡(luò)變化

  • 網(wǎng)卡
    多了一個(gè)veth網(wǎng)卡,從名字可以看出這是一個(gè)veth pair設(shè)備,并且在docker0上。
5: vethe9a0e73@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP
    link/ether 1e:ec:13:2e:96:e4 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::1cec:13ff:fe2e:96e4/64 scope link 
       valid_lft forever preferred_lft forever
  • 網(wǎng)橋
    網(wǎng)橋多了一個(gè)接口,該接口就是上面的veth的網(wǎng)卡設(shè)備
[root@docker1 ~]# brctl show
bridge name    bridge id       STP enabled interfaces
docker0        8000.0242a8646c32   no      vethe9a0e73
  • 網(wǎng)絡(luò)命名空間
    執(zhí)行ip netns依然返回空。
    其實(shí)docker會(huì)為每個(gè)容器創(chuàng)建net namespace,只是沒(méi)掛載在/var/run/netns目錄下,所以用ip netns命令查不到。
    小tip:如果想用ip netns查看,可以用ln –s創(chuàng)建軟連接,自行搜索吧。

3.3 查看容器內(nèi)部網(wǎng)絡(luò)

執(zhí)行docker exec -it bbox1 sh進(jìn)入容器

  • 網(wǎng)卡及路由表
[root@docker1 ~]# docker exec -it bbox1 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # 
/ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0

可以發(fā)現(xiàn),容器的網(wǎng)卡eth0跟bridge上的vethe9a0e73是一對(duì)veth pair設(shè)備,并且容器內(nèi)部的默認(rèn)路由指向docker0的IP 172.17.0.1。

3.4 容器網(wǎng)絡(luò)拓?fù)?/h4>

結(jié)合上面的分析,畫出當(dāng)前網(wǎng)絡(luò)拓?fù)淙缦拢?br />

3.5 兩個(gè)容器

執(zhí)行docker run -it -d --name=bbox2 busybox,創(chuàng)建一個(gè)新容器。
網(wǎng)絡(luò)拓?fù)淙缦拢?br />

bbox1 ping bbox2,就是簡(jiǎn)單的二層轉(zhuǎn)發(fā),過(guò)程如下:

  1. 在bbox1內(nèi)部ping 172.17.0.3,根據(jù)bbox1的路由表的默認(rèn)路由,報(bào)文從eth0發(fā)出,docker0上的vethe9a0e73收到;
  2. docker0就是虛擬交換機(jī),遵從二層轉(zhuǎn)發(fā),根據(jù)目的mac查到對(duì)應(yīng)的端口,將其送出;
  3. bbox2收到報(bào)文。

4.小結(jié)

  • 安裝Docker時(shí),Docker會(huì)自動(dòng)創(chuàng)建一個(gè)名為docker0的bridge
  • 每個(gè)容器都有自己的net namespace
  • 創(chuàng)建容器,如果不指定網(wǎng)絡(luò),則默認(rèn)使用bridge模式并且連接到docker0
  • 容器與docker0通過(guò)veth pair連接

下一節(jié),我們介紹容器與外部的通信。點(diǎn)擊此處回到docker系列文章目錄。

原創(chuàng)文章,如果轉(zhuǎn)載,請(qǐng)聲明出處!

-----------------------------------------------------------------------------------------------

本人微信公眾號(hào)同步更新云計(jì)算、容器、網(wǎng)絡(luò)、編程等文章,歡迎參觀!

總結(jié)

以上是生活随笔為你收集整理的Docker-Bridge Network 01 容器间通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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