docker的网络模式:bridge

docker环境下面一般缺省配置有三个网络类型:

  1. bridge
  2. host
  3. none

缺省情况下,每一种网络类型都会创建一个同名网络。

这里我们介绍bridge网络。
在docker环境下bridge网络是最常用的网络模式,可以控制在一个bridge网络内的container互相连通,不同bridge的container互相隔离。

  1. 缺省bridge网络

docker安装完之后缺省创建一个bridge网络,对应的网络接口就是docker0

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
30ad283d2b88        bridge              bridge              local
0900a7fe3411        host                host                local
c60923002052        none                null                local

查看bridge网络的地址:

$ docker network inspect bridge 
[
    {
        "IPAM": {
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]

在主机上查看网络接口docker0的信息:

$ ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
        inet6 ...
        ether ...
        ...
  1. 加入container到bridge网络

任意启动一个container,因为手头有zookeeper的image,就直接起了。

$ docker run --rm -dit zookeeper
5d93fafaba2ae819ef54b2a14e59ac78696b9f15a27bf00ff39076db14fb9078

注意bridge也是所有container的缺省网络,如果在创建container的时候没指定网络,那么系统就会自动加入到bridge网络中。(--network用来指定网络)
查看container的地址:

$ docker exec -it 5d93fafaba2ae819ef54b2a14e59ac78696b9f15a27bf00ff39076db14fb9078 bash
bash-4.4# ifconfig 
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          ...
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          ...
bash-4.4# ip route
default via 172.17.0.1 dev eth0 
172.17.0.0/16 dev eth0 scope link  src 172.17.0.2 

我们可以看到container使用的IP地址是172.17.0.2,网关地址是172.17.0.1。
那么172.17.0.1是谁呢,前面我们已经知道了,就是网卡docker0的地址,就是bridge的地址。所以在docker里面会把信息默认发送到网关172.17.0.1,即网关的地址,从而实现网络内的互通功能。

再查看docker中标准的container地址:

$ docker network inspect bridge 
[
    {
        "Containers": {
            "5d93fafaba2ae819ef54b2a14e59ac78696b9f15a27bf00ff39076db14fb9078": {
                "Name": "unruffled_lovelace",
                "EndpointID": "...",
                "MacAddress": "...",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },

这就说明container里面eth0的地址就是172.17.0.2了。

再来查看bridge信息:
请先安装bridge-utils:sudo apt-get install bridge-utils

$ brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.0242919ae797       no              vethed80010

这里面有一个重要信息,就是vethed80010的interface,我们查看他的信息:

$ ifconfig
vethed80010: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::8072:3ff:fe53:60d1  prefixlen 64  scopeid 0x20<link>
        ether 82:72:03:53:60:d1  txqueuelen 0  (Ethernet)
        ...

我们再来看ip link的输出:

$ ip link
...
26: vethed80010@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT 
    link/ether 9a:0f:4d:07:72:db brd ff:ff:ff:ff:ff:ff link-netnsid 2

进入container里面再执行:

root@c60c61dcd4ac:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 51  bytes 10580 (10.3 KiB)
        RX errors 0  dropped 37  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@c60c61dcd4ac:/# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
25: eth0@if26: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0

这个地方我们清楚的看到主机上网卡和container内部的网卡的一对映射关系:

  • 主机上:26: vethed80010@if25
  • 容器里:25: eth0@if26

我们知道在bridge模式下,每启动一个container都会创建一个interface对,这一对interface,一端就是container里面的eth0,另一端就是这个vethXXXX的interface,而且各自都标识了对端。

所以这个vethXXXX就是container内部的eth0在主机上的映射。因为每创建一个container都会在主机的ifconfig和brctl show的输出中多出一条内容。

  1. 自创建bridge网络
docker network create my-network

每一个自创建的网络,在主机上都有一个"br-"开头的interface;这和缺省bridge网络一样,只不过bridge使用的interface名字也叫bridge,不以br-开头,而自定义的网络使用br-开头罢了:

NETWORK         INTERFACE
bridge          bridge
my-network      br-945148bc5539
my-network2     br-e0ba2220542b
...

这个bridge充当了路由转发的功能,保证同一个bridge网络的container都能够互相通信。

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4...
    姚兴泉阅读 418评论 0 0
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,670评论 0 7
  • 关于docker网络模式有四种,内容如下,至于内容从来哪的,我也不知道,反正网上找的 前言:我们在使用docker...
    撸大师阅读 12,913评论 3 9
  • 跨主机网络 跨主机网络方案包括:1、docker 原生的 overlay 和 macvlan。2、第三方方案:常用...
    阳一yayi阅读 1,885评论 0 5
  • 离2018还有1天半天,离2017年结束,还剩36小时,不管今年是否达到年初设定的目标,结果就摆在我们眼前,不遮遮...
    D018李静阅读 326评论 0 0