Docker——网络通信(五)(2)

三、两个Tomcat通信的原理分析验证


按照上面的描述,实际上每个container,都会有自己的network namespace,并且是独立的,我们可以进入


到容器中进行验证


第一步:先创建两个容器


docker run -d --name tomcat01 -p 8081:8080 tomcat
docker run -d --name tomcat02 -p 8082:8080 tomcat


Docker——网络通信(五)(2)


第二步:进入到两个容器中,并且查看ip


docker exec -it tomcat01 ip a
docker exec -it tomcat02 ip a


Docker——网络通信(五)(2)


Docker——网络通信(五)(2)


由此就引入了新的问题:

tomcat01和tomcat02属于两个network namespace,是如何能够ping通的?但是这里并不是上述提到的veth-pair技术。


Docker——网络通信(五)(2)


Tomcat1与Dockers中的网卡 通过veth-pair技术连接,Tomcat2与Dockers中网卡 通过veth-pair技术连接,因为Docker0中的网卡,都在一个网段,类似通过Bridge的方式进行连接。


为什么宿主主机能够Ping通容器?

答:每一个容器都连在同一个网段当中,所以能够Ping通。


为什么容器能够互相Ping通?

答:每一个容器都连在同一个网段当中,所以能够Ping通。


(1)首先安装bridge-utils工具包


yum install bridge-utils


Docker——网络通信(五)(2)


(2)查看Linux中的网桥


brctl show 


Docker——网络通信(五)(2)


所以,Tomcat1和Tomcat2在一个网段,并且能够互相Ping通。


Docker——网络通信(五)(2)


docker network inspect bridge 查看桥接网络的详情


[
    {
        "Name": "bridge",
        "Id": "b15aa1ecc25828e428cfa89a3a33843e112499b5936fc4939336b2548244fd3f",
        "Created": "2021-07-10T04:48:08.630243664+02: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": {
            "08e054de3926d6af7e325caed69abe4ee3678cf4ba8e36385d738ae5c6c4d9a7": {
                "Name": "tomcat02",
                "EndpointID": "b1b3ccbd27ccc5c5a8d6c5d757c54c93c31900d7931141c6205301f1cb08b78d",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },
            "10c78d9117d627c0c572cf86f0b78deb481f4bf33fd9b61f78065ec23572557f": {
                "Name": "tomcat01",
                "EndpointID": "4aae15f702fc518094ebd8bd14fd21931fca0bb7e7b420f864d43ff4013ccf50",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "51fc803bf26776726bc3aaec6c5523b85274b41ce9719bc51f11b06683c29917": {
                "Name": "tomcat03",
                "EndpointID": "8917d37597e376d572d417cc7df4d84ae73c1adc28833d606dacc2bf1bcd78cb",
                "MacAddress": "02:42:ac:11:00:04",
                "IPv4Address": "172.17.0.4/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——Image的原理(四)(4)


下一篇:Docker——网络通信(五)(3)