Docker网络

[root@iz8vbd1ko98b0el6771a37z ~]# ip addr
# 本地
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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
# 阿里云
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:3e:16:14:7d brd ff:ff:ff:ff:ff:ff
    inet 172.22.170.13/20 brd 172.22.175.255 scope global dynamic eth0
       valid_lft 314250519sec preferred_lft 314250519sec
# docker
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 02:42:2f:31:6d:f9 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
docker如何处理容器网络访问
[root@iz8vbd1ko98b0el6771a37z ~]# docker run -d -P --name tomcat01 tomcat

# 查看容器内部网络地址: ip addr, 
[root@iz8vbd1ko98b0el6771a37z ~]# docker exec -it tomcat01 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    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

# eth0@if39 ip地址,docker分配的
38: eth0@if39: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
# 容器所在宿主机可以ping通容器
[root@iz8vbd1ko98b0el6771a37z ~]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.080 m
  • 每启动一个docker容器,docker就会给docker容器分配一个ip,只要安装了docker,就会有网卡docker0 桥接模式,使用的技术是evth-pair技术
[root@iz8vbd1ko98b0el6771a37z ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:3e:16:14:7d brd ff:ff:ff:ff:ff:ff
    inet 172.22.170.13/20 brd 172.22.175.255 scope global dynamic eth0
       valid_lft 314249714sec preferred_lft 314249714sec
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:2f:31:6d:f9 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
39: vethb811af7@if38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether aa:c3:9b:d5:a9:4c brd ff:ff:ff:ff:ff:ff link-netnsid 0
# 容器带来的网卡都是一对对的
# evth-pair就是一对的虚拟设备接口,都是成对出现的,一段连着协议,一段彼此相连
# evth-pair充当一个桥梁,连接各种虚拟设备
  • 容器和容器之间是可以ping通的

    tomcat1、tomcat2是公用的一个路由器,docker0.所有的容器不指定网络的情况下,都是由docker0路由的,docker会给容器分配一个默认的可用IP

小结

Docker使用的是Linux的桥接,宿主机中是一个Docker容器的网桥docker0.



Docker中的所有网络接口都是虚拟的,虚拟的转发效率高,只要容器删除,对应的网桥一对就没了

[root@iz8vbd1ko98b0el6771a37z ~]# docker run -d -P --name tomcat03 tomcat
f993c3cd26e7d291b4fb8555b73ae1a5112427b77fbcdc26139aba49b1e22a59
[root@iz8vbd1ko98b0el6771a37z ~]# docker run -d -P --name tomcat04 --link tomcat03 tomcat
d3e6174deeb96cbd53ce9a6baa1b9c0d74ac219fdf133e11a73ec0af5992628d
[root@iz8vbd1ko98b0el6771a37z ~]# docker exec -it tomcat04 ping tomcat03
PING tomcat03 (172.17.0.2) 56(84) bytes of data.
64 bytes from tomcat03 (172.17.0.2): icmp_seq=1 ttl=64 time=0.097 ms
# 反向ping不通
[root@iz8vbd1ko98b0el6771a37z ~]# docker exec -it tomcat03 ping tomcat04
ping: tomcat04: Name or service not known
# tomcat04的hosts中有配置域名解析
[root@iz8vbd1ko98b0el6771a37z ~]# docker exec -it tomcat04 cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2      tomcat03 f993c3cd26e7
172.17.0.3      d3e6174deeb9
[root@iz8vbd1ko98b0el6771a37z ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8af985e6dc86   bridge    bridge    local
64fa12d055bf   host      host      local
2bf14be33db0   none      null      local
[root@iz8vbd1ko98b0el6771a37z ~]# docker network inspect 8af985e6dc86
[
    {
        "Name": "bridge",
        "Id": "8af985e6dc861c18425bfbc8e912120af0f10022033cb589dbf1bac8d44edd72",
        "Created": "2021-06-20T23:22:41.159235158+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "d3e6174deeb96cbd53ce9a6baa1b9c0d74ac219fdf133e11a73ec0af5992628d": {
                "Name": "tomcat04",
                "EndpointID": "1a811da6f02384e19957563a973f995c3a9696fdadfd14a1e2901121c1f78e16",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },
            "f993c3cd26e7d291b4fb8555b73ae1a5112427b77fbcdc26139aba49b1e22a59": {
                "Name": "tomcat03",
                "EndpointID": "3f8e6f8d051cba8bf15cdea445629b2d431a705d10cee7fe240b0bfbae0dc138",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

自定义网络

# 查看所有的docker网络
[root@iz8vbd1ko98b0el6771a37z ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8af985e6dc86   bridge    bridge    local
64fa12d055bf   host      host      local
2bf14be33db0   none      null      local
网络模式
  • bridge: 桥接模式,桥接 docker 默认,自己创建的也是用bridge模式
  • none: 不配置网络
  • host: 和宿主机共享网络
  • container:容器网络连通!(用的少, 局限很大)
    测试
# 我们直接启动的命令默认有一个 --net bridge,而这个就是我们的docker0
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
# docker0特点,默认,容器名不能访问, --link可以打通连接!
# 我们可以自定义一个网络!
# --driver bridge
# --subnet 192.168.0.0/16 可以支持255*255个网络 192.168.0.2 ~ 192.168.255.254
# --gateway 192.168.0.1
# 1. 创建网络
[root@iz8vbd1ko98b0el6771a37z ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
89fac21c26c6243b9e0ef9bcdc5c4db4f1f96a75acbc76d0d0e341d3d96cb0da
[root@iz8vbd1ko98b0el6771a37z ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8af985e6dc86   bridge    bridge    local
64fa12d055bf   host      host      local
89fac21c26c6   mynet     bridge    local
2bf14be33db0   none      null      local
# 2. 查看网络信息
[root@iz8vbd1ko98b0el6771a37z ~]# docker network inspect 89fac21c26c6
[
    {
        "Name": "mynet",
        "Id": "89fac21c26c6243b9e0ef9bcdc5c4db4f1f96a75acbc76d0d0e341d3d96cb0da",
        "Created": "2021-07-03T22:16:13.746307644+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
# 3. 创建容器并指定网络
[root@iz8vbd1ko98b0el6771a37z ~]# docker run -d -P --name tomcat-net-01 --net mynet tomcat
a51a87cafb2dadebea6f7090f508beb87ea060782d100ea98210c08768a56320
[root@iz8vbd1ko98b0el6771a37z ~]# docker run -d -P --name tomcat-net-02 --net mynet tomcat
6e04467d633af4b6f2beff7ea6dfdad7293d4ba192987cf8116e2402ccbce473
[root@iz8vbd1ko98b0el6771a37z ~]# docker network inspect 89fac21c26c6
[
    {
        "Name": "mynet",
        "Id": "89fac21c26c6243b9e0ef9bcdc5c4db4f1f96a75acbc76d0d0e341d3d96cb0da",
        "Created": "2021-07-03T22:16:13.746307644+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "6e04467d633af4b6f2beff7ea6dfdad7293d4ba192987cf8116e2402ccbce473": {
                "Name": "tomcat-net-02",
                "EndpointID": "cc1c7f178cb9427e5fcb3919198bcfdb3d1e01e5fb311dcb5e798a06a23a35aa",
                "MacAddress": "02:42:c0:a8:00:03",
                "IPv4Address": "192.168.0.3/16",
                "IPv6Address": ""
            },
            "a51a87cafb2dadebea6f7090f508beb87ea060782d100ea98210c08768a56320": {
                "Name": "tomcat-net-01",
                "EndpointID": "f1b3d132f94b6b8007cd8683a86e95362b9ce018039d9e894b0e0155fbf8c114",
                "MacAddress": "02:42:c0:a8:00:02",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
# 4. 测试容器之间的网络互通性
[root@iz8vbd1ko98b0el6771a37z ~]# docker exec -it tomcat-net-02 ping tomcat-net-01
PING tomcat-net-01 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.097 ms
[root@iz8vbd1ko98b0el6771a37z ~]# docker exec -it tomcat-net-01 ping tomcat-net-02
PING tomcat-net-02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.104 ms

好处

  • redis 不同的集群使用不同的网络,保证集群时安全和健康的
  • mysql 不同的集群使用不同的网络,保证集群时安全和健康的

网络连通

[root@iz8vbd1ko98b0el6771a37z ~]# docker exec -it tomcat01 ping tomcat-net-02
ping: tomcat-net-02: Name or service not known
[root@iz8vbd1ko98b0el6771a37z ~]# docker network connect mynet tomcat01
[root@iz8vbd1ko98b0el6771a37z ~]# docker exec -it tomcat01 ping tomcat-net-02
PING tomcat-net-02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.119 ms
# 将tomcat01放到mynet网络下
[root@iz8vbd1ko98b0el6771a37z ~]# docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "89fac21c26c6243b9e0ef9bcdc5c4db4f1f96a75acbc76d0d0e341d3d96cb0da",
        "Created": "2021-07-03T22:16:13.746307644+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "6e04467d633af4b6f2beff7ea6dfdad7293d4ba192987cf8116e2402ccbce473": {
                "Name": "tomcat-net-02",
                "EndpointID": "cc1c7f178cb9427e5fcb3919198bcfdb3d1e01e5fb311dcb5e798a06a23a35aa",
                "MacAddress": "02:42:c0:a8:00:03",
                "IPv4Address": "192.168.0.3/16",
                "IPv6Address": ""
            },
            "a51a87cafb2dadebea6f7090f508beb87ea060782d100ea98210c08768a56320": {
                "Name": "tomcat-net-01",
                "EndpointID": "f1b3d132f94b6b8007cd8683a86e95362b9ce018039d9e894b0e0155fbf8c114",
                "MacAddress": "02:42:c0:a8:00:02",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            },
            "bb3512e4c825f5983ed2b4d14a0c2dd687c1176035d6fdb589ae36c8f7887142": {
                "Name": "tomcat01",
                "EndpointID": "640088f5f77be08d1d406116ccdd4f9a77c3bf045fa7dbca2da6fff68c562589",
                "MacAddress": "02:42:c0:a8:00:04",
                "IPv4Address": "192.168.0.4/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容

  • 当项目大规模使用 Docker 时,容器通信的问题也就产生了。要解决容器通信问题,必须先了解很多关于网络的知识。D...
    哈喽沃德先生阅读 1,312评论 0 8
  • 本文主要是介绍docker默认的网络行为,包含创建的默认网络类型以及如何创建用户自定义网络,也会介绍如何在单一主机...
    凤落溪凰落地阅读 38,168评论 1 4
  • 转自:http://ju.outofmemory.cn/entry/255894 概述自从docker容器出现以来...
    dleyanlin阅读 1,512评论 0 7
  • 概述 自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求。而容器的网络通信...
    糙老爷们儿吃什么樱桃阅读 3,623评论 1 5
  • Docker 网络原理 1. Docker 网络理论 容器网络实质上是由 Dokcer 为应用程序所创造的虚拟环境...
    iamChel阅读 1,814评论 1 2