zoukankan      html  css  js  c++  java
  • 容器(五)学容器必须懂 bridge 网络【27】

    (二)学容器必须懂 bridge 网络

    ​ 本节学习应用最广泛也是默认的 bridge 网络。

    ​ Docker 安装时会创建一个 命名为 docker0 的 linux bridge。如果不指定--network,创建的容器默认都会挂到 docker0 上。

    root@cuiyongchao:~# brctl show
    bridge name	bridge id		STP enabled	interfaces
    docker0		8000.0242b316d415	no		veth5693146
    							vethea16017
    							vethf263a23
    root@cuiyongchao:~# 
    

    ​ 新创建一个容器,在docker0上新增的一个interface。一个新的网络接口 veth6825577被挂到了 docker0 上,veth6825577就是新创建容器的虚拟网卡。

    root@cuiyongchao:~# docker run -d  httpd
    f02ffc0410f143cfc3065dc0210b28f4e745106eb097b4a4e2f2fde3993fce2d
    root@cuiyongchao:~# brctl show
    bridge name	bridge id		STP enabled	interfaces
    docker0		8000.0242b316d415	no		veth5693146
    							veth6825577
    							vethea16017
    							vethf263a23
    root@cuiyongchao:~# 
    
    

    ​ 下面看一下容器的网络配置。

    root@cuiyongchao:~# docker run --name sili -it busybox
    / # ifconfig
    eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:04  
              inet addr:172.17.0.4  Bcast:172.17.255.255  Mask:255.255.0.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:6 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:516 (516.0 B)  TX bytes:0 (0.0 B)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    / # 
    
    

    ​ 容器有一个网卡 eth0。大家可能会问了,为什么不是brctl show查出来的vethab0efda 呢?

    ​ 实际上 eth0 和vethab0efda 是一对 veth pair。veth pair 是一种成对出现的特殊网络设备,可以把它们想象成由一根虚拟网线连接起来的一对网卡,网卡的一头(eth0)在容器中,另一头(vethab0efda )挂在网桥 docker0上,其效果就是将eth0也挂在了 docker0 上。

    ​ 我们还看到 eth0已经配置了 IP 172.17.0.2,为什么是这个网段呢?让我们通过 docker network inspect bridge` 看一下 bridge 网络的配置信息:

    root@cuiyongchao:~# docker network inspect bridge 
    [
        {
            "Name": "bridge",
            "Id": "aa9cc7a43b3f51e1d6f06ffbbb7f53843ad2379a5317a09388edcf7a35852853",
            "Created": "2020-10-29T12:14:27.3344923Z",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": null,
                "Config": [
                    {
                        "Subnet": "172.17.0.0/16",
                        "Gateway": "172.17.0.1"
                    }
                ]
    
    

    ​ 原来 bridge 网络配置的 subnet 就是 172.17.0.0/16,并且网关是 172.17.0.1。这个网关在哪儿呢?大概你已经猜出来了,就是 docker0。

    ​ 容器创建时,docker 会自动从 172.17.0.0/16 中分配一个 IP,这里 16 位的掩码保证有足够多的 IP 可以供容器使用。

    ​ 除了 none, host, bridge 这三个自动创建的网络,用户也可以根据业务需要创建 user-defined 网络,下一节我们将详细讨论。

  • 相关阅读:
    Neo.Geo系统视频硬件结构模拟 v2.0
    [原创] CPS1模拟器开发日志
    在博客园发现恶意群体回复打广告的
    [原创] Neo.Geo系统视频硬件结构模拟
    在 ASP.NET 中执行 URL 重写(读书笔记)
    c#中什么情况下用(int)什么情况下用Convert.ToInt32
    ASP.NET 例程完全代码版(7)——2.0中实现自配置的成员角色管理库
    Request.UrlReferrer详解
    .NET中获取电脑名、IP及用户名方法
    ASP.NET 2.0中的跨页面提交
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/13995410.html
Copyright © 2011-2022 走看看