• Docker 自定义网络


    不使用Docker0,如何实现Docker 自定义网络?

    为什么要自定义网路?

    Docker 不同容器之间通过Docker0相互通信,Docker0 相当于一个路由,不容容器之间的通信请求,通过Docker0 转发,从而实现通信。

    这样就会有一个问题,我有一个微服务A,一个微服务B,都需要联网,但是彼此之间不想要它们互相通信,那么,我应该有两个路由器,把他们之间的网络分隔开来,微服务A连接路由器A,微服务B连接路由器B。
    打个不恰当的比方,公司里有工作用的网络,专门用来开发调试,有另外一个网络,用来大家连手机上网休闲。

    如何实现?

    自定义网络

    docker 默认的网络是这样的:
    [root@master ~]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    fdb6422b930e        bridge              bridge              local
    011b1f4ef6e0        host                host                local
    036c9a4e48f0        none                null                local
    
    

    主要有这样几种网络模式:
    bridge:桥接 docker(默认,自己创建也使用 bridge 模式)
    none:不配置网络
    host:和宿主机共享网络
    container:容器网络连通!(用的少!局限很大)

    创建自定义网络

    --driver bridge  设置网络模式
    --subnet 192.168.0.1/16  设置子网
    --gateway 192.168.0.1 设置网关
    mynet  自定义网络的名称
    > docker network create --driver bridge --subnet 192.168.0.1/16 --gateway 192.168.0.1 mynet
    

    再次查看网络:

    [root@master ~]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    fdb6422b930e        bridge              bridge              local
    011b1f4ef6e0        host                host                local
    39b0bd3511f1        mynet               bridge              local
    036c9a4e48f0        none                null                local
    

    查看网络的配置信息:

    [root@master ~]# docker network inspect mynet
    [
        {
            "Name": "mynet",
            "Id": "39b0bd3511f18d421e3d98f207d8030bff75daad7606da122b7c775e7862967f",
            "Created": "2020-08-13T18:04:43.194957243-04:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "192.168.0.1/16",
                        "Gateway": "192.168.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {},
            "Options": {},
            "Labels": {}
        }
    ]
    

    可以看到 子网和网关已经改成我们自己配置的了。

    测试自定义网络

    启动2个容器,并指定到配置好的自定义网络:

    docker run -d -P --name tomacat-01 --net mynet tomcat
    docker run -d -P --name tomacat-02 --net mynet tomcat
    

    查看 mynet 的网络配置:

    [root@master ~]# docker network inspect mynet
    [
        {
            "Name": "mynet",
            "Id": "39b0bd3511f18d421e3d98f207d8030bff75daad7606da122b7c775e7862967f",
            "Created": "2020-08-13T18:04:43.194957243-04:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "192.168.0.1/16",
                        "Gateway": "192.168.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {
                "58458b207bd64924b8b0a48342fa3ee2dd37cb13007b2e8af489778dd27825eb": {
                    "Name": "tomacat-01",
                    "EndpointID": "c4df4aa340b4c2ecf83649808305028c580b531fc8ee39b8d896031fac453fae",
                    "MacAddress": "02:42:c0:a8:00:02",
                    "IPv4Address": "192.168.0.2/16",
                    "IPv6Address": ""
                },
                "7e7667813210702d8b5df80e2b512dd9b22195f84c85974f41ea19e915afb686": {
                    "Name": "tomacat-03",
                    "EndpointID": "e16c0ac5b3cddf361f992cf108034b6c0979b2c5798aeb61b03ffe6685267a79",
                    "MacAddress": "02:42:c0:a8:00:04",
                    "IPv4Address": "192.168.0.4/16",
                    "IPv6Address": ""
                },
                "f51f76d7a7d0fa9d1d974aed9b0631e1d27de8d58612b3815c54c6d4acf9d63a": {
                    "Name": "tomacat-02",
                    "EndpointID": "34ca624d1e86ab13d6614dd39c4b3a3dbb9a9d3ecf595e77035286b067f25504",
                    "MacAddress": "02:42:c0:a8:00:03",
                    "IPv4Address": "192.168.0.3/16",
                    "IPv6Address": ""
                }
            },
            "Options": {},
            "Labels": {}
        }
    ]
    

    可以看到刚才启动的两个容器的网络配置信息

    检查网络之间是否能够ping 通

    [root@master ~]# docker exec -it tomacat-01 ping tomacat-02
    PING tomacat-02 (192.168.0.3) 56(84) bytes of data.
    64 bytes from tomacat-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.090 ms
    64 bytes from tomacat-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.153 ms
    64 bytes from tomacat-02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.104 ms
    

    可以直接通过名字ping通,而通过docker0,只能通过ip ping通,如果想要通过名字ping通,需要通过--link 的方式,往hosts 文件里面写入名字和 ip的绑定关系。

    再做一个测试,自定义的两个网络之间的容器是否可以网络访问

    step01. 创建新的自定义网络 mynet2
    [root@master ~]# docker network create --driver bridge --subnet 190.160.0.1/16 --gateway 190.160.0.1 mynet2
    157079c4572404084896bd1aa360e2f489a712d8553663d4643b59875447ba9b
    
    step02. 查看docker 网络信息
    [root@master ~]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    fdb6422b930e        bridge              bridge              local
    011b1f4ef6e0        host                host                local
    39b0bd3511f1        mynet               bridge              local
    157079c45724        mynet2              bridge              local
    036c9a4e48f0        none                null                local
    
    step03. 创建两个新的容器
    [root@master ~]# docker run -d -P --name tomcat-03 --net mynet2 tomcat
    f796706b582a585e062e3e753b60a8afa7d356f7abe1a50ce034dff819eacb41
    [root@master ~]# docker run -d -P --name tomcat-04 --net mynet2 tomcat
    535015649c37149dffe8d30a1ac5a49fad7d837331a67cef5f899187d6a4cc5e
    
    
    step04. 查看mynet 的信息
    [root@master ~]# docker network inspect mynet
    [
        {
            "Name": "mynet",
            "Id": "39b0bd3511f18d421e3d98f207d8030bff75daad7606da122b7c775e7862967f",
            "Created": "2020-08-13T18:04:43.194957243-04:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "192.168.0.1/16",
                        "Gateway": "192.168.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {
                "58458b207bd64924b8b0a48342fa3ee2dd37cb13007b2e8af489778dd27825eb": {
                    "Name": "tomacat-01",
                    "EndpointID": "c4df4aa340b4c2ecf83649808305028c580b531fc8ee39b8d896031fac453fae",
                    "MacAddress": "02:42:c0:a8:00:02",
                    "IPv4Address": "192.168.0.2/16",
                    "IPv6Address": ""
                },
                "7e7667813210702d8b5df80e2b512dd9b22195f84c85974f41ea19e915afb686": {
                    "Name": "tomacat-03",
                    "EndpointID": "e16c0ac5b3cddf361f992cf108034b6c0979b2c5798aeb61b03ffe6685267a79",
                    "MacAddress": "02:42:c0:a8:00:04",
                    "IPv4Address": "192.168.0.4/16",
                    "IPv6Address": ""
                },
                "f51f76d7a7d0fa9d1d974aed9b0631e1d27de8d58612b3815c54c6d4acf9d63a": {
                    "Name": "tomacat-02",
                    "EndpointID": "34ca624d1e86ab13d6614dd39c4b3a3dbb9a9d3ecf595e77035286b067f25504",
                    "MacAddress": "02:42:c0:a8:00:03",
                    "IPv4Address": "192.168.0.3/16",
                    "IPv6Address": ""
                }
            },
            "Options": {},
            "Labels": {}
        }
    ]
    step05. 查看mynet 的信息
    [root@master ~]# docker network inspect mynet2
    [
        {
            "Name": "mynet2",
            "Id": "157079c4572404084896bd1aa360e2f489a712d8553663d4643b59875447ba9b",
            "Created": "2020-08-13T18:36:42.810030253-04:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "190.160.0.1/16",
                        "Gateway": "190.160.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {
                "535015649c37149dffe8d30a1ac5a49fad7d837331a67cef5f899187d6a4cc5e": {
                    "Name": "tomcat-04",
                    "EndpointID": "7f0d88a501f80ccf6bec1b3fc50bc65db5900feb8b3a35e32ebcde3ff1d9229f",
                    "MacAddress": "02:42:be:a0:00:03",
                    "IPv4Address": "190.160.0.3/16",
                    "IPv6Address": ""
                },
                "f796706b582a585e062e3e753b60a8afa7d356f7abe1a50ce034dff819eacb41": {
                    "Name": "tomcat-03",
                    "EndpointID": "83041338117c1b6c3d62f28e01d6055b10f399d22cf7a011ebb18df49acd4ddd",
                    "MacAddress": "02:42:be:a0:00:02",
                    "IPv4Address": "190.160.0.2/16",
                    "IPv6Address": ""
                }
            },
            "Options": {},
            "Labels": {}
        }
    ]
    
    step06. 尝试用tomacat-01  ping 通 tomcat-03
    [root@master ~]# docker exec -it tomacat-01 ping tomcat-03
    ping: tomcat-03: Name or service not known
    
    

    实现发现,ping 不同,这样可以保证不同服务之间彼此独立,保证独立性和安全性。

    如何联通?

    [root@master ~]# docker network --help
    Usage:  docker network COMMAND
    Manage networks
    Commands:
      connect     Connect a container to a network
      create      Create a network
      disconnect  Disconnect a container from a network
      inspect     Display detailed information on one or more networks
      ls          List networks
      prune       Remove all unused networks
      rm          Remove one or more networks
    Run 'docker network COMMAND --help' for more information on a command.
    

    使用connect 指令,可以把一个容器联通到一个网络。

    # connect 指令,将mynet 网络与tomcat-03 联通
    docker network connect mynet tomcat-03
    
    #查看mynet的网络配置信息
    [root@master ~]# docker network inspect mynet
    [
        {
            "Name": "mynet",
            "Id": "39b0bd3511f18d421e3d98f207d8030bff75daad7606da122b7c775e7862967f",
            "Created": "2020-08-13T18:04:43.194957243-04:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "192.168.0.1/16",
                        "Gateway": "192.168.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {
                "58458b207bd64924b8b0a48342fa3ee2dd37cb13007b2e8af489778dd27825eb": {
                    "Name": "tomacat-01",
                    "EndpointID": "c4df4aa340b4c2ecf83649808305028c580b531fc8ee39b8d896031fac453fae",
                    "MacAddress": "02:42:c0:a8:00:02",
                    "IPv4Address": "192.168.0.2/16",
                    "IPv6Address": ""
                },
                "7e7667813210702d8b5df80e2b512dd9b22195f84c85974f41ea19e915afb686": {
                    "Name": "tomacat-03",
                    "EndpointID": "e16c0ac5b3cddf361f992cf108034b6c0979b2c5798aeb61b03ffe6685267a79",
                    "MacAddress": "02:42:c0:a8:00:04",
                    "IPv4Address": "192.168.0.4/16",
                    "IPv6Address": ""
                },
                "f51f76d7a7d0fa9d1d974aed9b0631e1d27de8d58612b3815c54c6d4acf9d63a": {
                    "Name": "tomacat-02",
                    "EndpointID": "34ca624d1e86ab13d6614dd39c4b3a3dbb9a9d3ecf595e77035286b067f25504",
                    "MacAddress": "02:42:c0:a8:00:03",
                    "IPv4Address": "192.168.0.3/16",
                    "IPv6Address": ""
                },
                "f796706b582a585e062e3e753b60a8afa7d356f7abe1a50ce034dff819eacb41": {
                    "Name": "tomcat-03",
                    "EndpointID": "1bdfa074eeacd156ad16110bd19e485126de88bbfbcf443be8a3938455d61c02",
                    "MacAddress": "02:42:c0:a8:00:05",
                    "IPv4Address": "192.168.0.5/16",
                    "IPv6Address": ""
                }
            },
            "Options": {},
            "Labels": {}
        }
    ]
    
    # 测试是否联通 03能联通,04不通
    [root@master ~]# docker exec -it tomacat-01 ping tomcat-03
    PING tomcat-03 (192.168.0.5) 56(84) bytes of data.
    64 bytes from tomcat-03.mynet (192.168.0.5): icmp_seq=1 ttl=64 time=0.096 ms
    64 bytes from tomcat-03.mynet (192.168.0.5): icmp_seq=2 ttl=64 time=0.100 ms
    64 bytes from tomcat-03.mynet (192.168.0.5): icmp_seq=3 ttl=64 time=0.098 ms
    ^C
    --- tomcat-03 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 5ms
    rtt min/avg/max/mdev = 0.096/0.098/0.100/0.001 ms
    [root@master ~]# docker exec -it tomacat-01 ping tomcat-04
    ping: tomcat-04: Name or service not known
    
    

    这样就可以实现容器与其他网络之间的联通。

    网络与网络之间怎么联通?
    配在一起不就完了嘛

  • 相关阅读:
    MariaDB的安装与启动
    Win10系统提示对于目标文件系统过大
    kvm中重命名虚拟机
    libvirt启动报错Failed to start Virtualization daemon
    常用的一些开源小工具 之 日期时间类
    常用的一些开源小工具 之 StringUtils
    zookeeper之 watch机制(三)
    shiro权限框架使用详解
    zookeeper节点之 java操作 和zookeeper-权限(ACL),设置超级用户(二)
    时间处理Date,最好改成 LocalDateTime ,时间计算,格式化时间,增加减少时间
  • 原文地址:https://www.cnblogs.com/bigband/p/13513008.html
Copyright © 2020-2023  润新知