Docker——网络通信(五)

一、 计算机网络模型 以及常用的命令

在这里插入图片描述
在这里插入图片描述
网卡:
计算机网络中,计算机要进行通信硬件支撑,唯一的MAC地址。

ip link show 

在这里插入图片描述
ip a解读
状态:UP/DOWN/UNKOWN等
link/ether:MAC地址
inet:绑定的IP地址

在特定目录下,能够查看网卡
在这里插入图片描述
修改网卡信息

cd /etc/sysconfig/network-scripts/
ls

在这里插入图片描述
编辑网卡0的信息
在这里插入图片描述
在这里插入图片描述

给网卡添加IP地址

当然,这块可以直接修改ifcfg-*文件,但是我们通过命令添加试试

1)ip addr add 192.168.0.100/24 dev eth0
(2)删除IP地址
ip addr delete 192.168.0.100/24 dev eth0

网卡启动与关闭

重启网卡 :service network restart / systemctl restart network
启动/关闭某个网卡 :ifup/ifdown eth0 or ip link set eth0 up/down

二、网络通信两个不同的网卡之间通过virth-pair通信

1、 创建一个network namespace

ip netns add ns1

2、查看该namespace下网卡的情况

ip netns exec ns1 ip a

在这里插入图片描述
3、打开网卡

//打开网卡
ip netns exec ns1 ifup lo

4、查看网卡状态

//查看网卡状态
ip netns exec ns1 ip a

在这里插入图片描述
5、再次创建一个network namespace
在这里插入图片描述
6、此时想让两个namespace网络连通起来
veth pair :Virtual Ethernet Pair,是一个成对的端口,可以实现上述功能
在这里插入图片描述
7、创建一对link,也就是接下来要通过veth pair连接的link

ip link add veth-ns1 type veth peer name veth-ns2

8、查看link情况

ip link

在这里插入图片描述
9、将veth-ns1加入ns1中,将veth-ns2加入ns2中

ip link set veth-ns1 netns ns1
ip link set veth-ns2 netns ns2

在这里插入图片描述

10、查看宿主机和ns1,ns2的link情况

ip link
ip netns exec ns1 ip link
ip netns exec ns2 ip link

在这里插入图片描述
在这里插入图片描述
11、此时veth-ns1和veth-ns2还没有ip地址,显然通信还缺少点条件

ip netns exec ns1 ip addr add 192.168.0.11/24 dev veth-ns1
ip netns exec ns2 ip addr add 192.168.0.12/24 dev veth-ns2

12、再次查看,发现state是DOWN,并且还是没有IP地址

ip netns exec ns1 ip link
ip netns exec ns2 ip link

在这里插入图片描述
13、启动veth-ns1和veth-ns2

ip netns exec ns1 ip link set veth-ns1 up
ip netns exec ns2 ip link set veth-ns2 up

在这里插入图片描述
14、再次查看,发现state是UP,同时有IP

ip netns exec ns1 ip a
ip netns exec ns2 ip a

在这里插入图片描述
15、此时两个network namespace互相ping一下,发现是可以ping通的

ip netns exec ns1 ping 192.168.0.12
ip netns exec ns2 ping 192.168.0.11

在这里插入图片描述
在这里插入图片描述

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

按照上面的描述,实际上每个container,都会有自己的network namespace,并且是独立的,我们可以进入
到容器中进行验证
第一步:先创建两个容器

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

在这里插入图片描述
第二步:进入到两个容器中,并且查看ip

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

在这里插入图片描述

在这里插入代码片
docker exec -it tomcat01 bash
ping 172.17.0.3

在这里插入图片描述
由此就引入了新的问题:
tomcat01和tomcat02属于两个network namespace,是如何能够ping通的?但是这里并不是上述提到的veth-pair技术。
在这里插入图片描述
Tomcat1与Dockers中的网卡 通过veth-pair技术连接,Tomcat2与Dockers中网卡 通过veth-pair技术连接,因为Docker0中的网卡,都在一个网段,类似通过Bridge的方式进行连接。

为什么宿主主机能够Ping通容器?
答:每一个容器都连在同一个网段当中,所以能够Ping通。

为什么容器能够互相Ping通?
答:每一个容器都连在同一个网段当中,所以能够Ping通。

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

yum install bridge-utils

在这里插入图片描述
(2)查看Linux中的网桥

brctl show 

在这里插入图片描述
(3)查看Tomcat中的网桥

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

在这里插入图片描述

所以,Tomcat1和Tomcat2在一个网段,并且能够互相Ping通。
在这里插入图片描述

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": {}
    }
]

四、对于不同网段的容器如何Ping通

在这里插入图片描述
在这里插入图片描述

  • 首先第一步删除容器
docker rm -f $(docker ps -qa)
  • 启动一个Tomcat
docker run -d --name tomcat01 tomcat
  • 查看容器的网络信息
docker exec -it tomcat01 ip a 
  • 查看bridge的网络
docker network inspect bridge

在这里插入图片描述

  • 创建一个Bridge类型的网络
docker network create tomcat-net
docker network ls 

在这里插入图片描述

  • 创建tomcat的容器,并且指定使用tomcat-net
docker run -d --name custom-net-tomcat --network  tomcat-net tomcat
  • 查看custom-net-tomcat容器的网络信息
docker exec -it custom-net-tomcat ip a

在这里插入图片描述

docker exec -it custom-net-tomcat bash 

在这里插入图片描述

  • Ping不通后的思路,将Tomcat01加入到Tomcat-net中

在这里插入图片描述

  • 查看Tomcat01的网络信息
docker inspect tomcat01

发现只有一个网络信息
在这里插入图片描述

[
    {
        "Id": "706eba52a567f5fd3e5b29a4808aad4d8038a70973474fb0e88922f36b4c659b",
        "Created": "2021-07-17T06:57:12.245072309Z",
        "Path": "catalina.sh",
        "Args": [
            "run"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 8748,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-07-17T06:57:12.84813853Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:36ef696ea43d360827271a0d69475cb11fde0029d26fda66ea3204c116908597",
        "ResolvConfPath": "/var/lib/docker/containers/706eba52a567f5fd3e5b29a4808aad4d8038a70973474fb0e88922f36b4c659b/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/706eba52a567f5fd3e5b29a4808aad4d8038a70973474fb0e88922f36b4c659b/hostname",
        "HostsPath": "/var/lib/docker/containers/706eba52a567f5fd3e5b29a4808aad4d8038a70973474fb0e88922f36b4c659b/hosts",
        "LogPath": "/var/lib/docker/containers/706eba52a567f5fd3e5b29a4808aad4d8038a70973474fb0e88922f36b4c659b/706eba52a567f5fd3e5b29a4808aad4d8038a70973474fb0e88922f36b4c659b-json.log",
        "Name": "/tomcat01",
        "RestartCount": 0,
        "Driver": "devicemapper",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "DeviceId": "68",
                "DeviceName": "docker-253:0-34148462-17e715b9db6bd0796cc41f9da23748590ef6d8c118b414a1076ba02665040fd8",
                "DeviceSize": "10737418240"
            },
            "Name": "devicemapper"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "706eba52a567",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "8080/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/tomcat/bin:/usr/local/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "JAVA_HOME=/usr/local/openjdk-11",
                "LANG=C.UTF-8",
                "JAVA_VERSION=11.0.11+9",
                "CATALINA_HOME=/usr/local/tomcat",
                "TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib",
                "LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib",
                "GPG_KEYS=48F8E69F6390C9F25CFEDCD268248959359E722B A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243",
                "TOMCAT_MAJOR=9",
                "TOMCAT_VERSION=9.0.50",
                "TOMCAT_SHA512=06cd51abbeebba9385f594ed092bd30e510b6314c90c421f4be5d8bec596c6a177785efc2ce27363813f6822af89fc88a2072d7b051960e5387130faf69c447b"
            ],
            "Cmd": [
                "catalina.sh",
                "run"
            ],
            "Image": "tomcat",
            "Volumes": null,
            "WorkingDir": "/usr/local/tomcat",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "1ad99fcf623a208d11b27a6d99e8b46d6091c4c310306f35bf6414deca78fb01",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "8080/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/1ad99fcf623a",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "4b453a7852e2d543e135ac1232464760a296e857e3f8b46f9d01d4500a0f8bb4",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "b15aa1ecc25828e428cfa89a3a33843e112499b5936fc4939336b2548244fd3f",
                    "EndpointID": "4b453a7852e2d543e135ac1232464760a296e857e3f8b46f9d01d4500a0f8bb4",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

  • 将Tomcat01加入到tomcat-net中
docker network connect tomcat-net tomcat01

在这里插入图片描述

  • 查看Tomcat01的网络命令
docker inspect tomcat01

在这里插入图片描述

[
    {
        "Id": "706eba52a567f5fd3e5b29a4808aad4d8038a70973474fb0e88922f36b4c659b",
        "Created": "2021-07-17T06:57:12.245072309Z",
        "Path": "catalina.sh",
        "Args": [
            "run"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 8748,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-07-17T06:57:12.84813853Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:36ef696ea43d360827271a0d69475cb11fde0029d26fda66ea3204c116908597",
        "ResolvConfPath": "/var/lib/docker/containers/706eba52a567f5fd3e5b29a4808aad4d8038a70973474fb0e88922f36b4c659b/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/706eba52a567f5fd3e5b29a4808aad4d8038a70973474fb0e88922f36b4c659b/hostname",
        "HostsPath": "/var/lib/docker/containers/706eba52a567f5fd3e5b29a4808aad4d8038a70973474fb0e88922f36b4c659b/hosts",
        "LogPath": "/var/lib/docker/containers/706eba52a567f5fd3e5b29a4808aad4d8038a70973474fb0e88922f36b4c659b/706eba52a567f5fd3e5b29a4808aad4d8038a70973474fb0e88922f36b4c659b-json.log",
        "Name": "/tomcat01",
        "RestartCount": 0,
        "Driver": "devicemapper",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "DeviceId": "68",
                "DeviceName": "docker-253:0-34148462-17e715b9db6bd0796cc41f9da23748590ef6d8c118b414a1076ba02665040fd8",
                "DeviceSize": "10737418240"
            },
            "Name": "devicemapper"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "706eba52a567",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "8080/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/tomcat/bin:/usr/local/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "JAVA_HOME=/usr/local/openjdk-11",
                "LANG=C.UTF-8",
                "JAVA_VERSION=11.0.11+9",
                "CATALINA_HOME=/usr/local/tomcat",
                "TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib",
                "LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib",
                "GPG_KEYS=48F8E69F6390C9F25CFEDCD268248959359E722B A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243",
                "TOMCAT_MAJOR=9",
                "TOMCAT_VERSION=9.0.50",
                "TOMCAT_SHA512=06cd51abbeebba9385f594ed092bd30e510b6314c90c421f4be5d8bec596c6a177785efc2ce27363813f6822af89fc88a2072d7b051960e5387130faf69c447b"
            ],
            "Cmd": [
                "catalina.sh",
                "run"
            ],
            "Image": "tomcat",
            "Volumes": null,
            "WorkingDir": "/usr/local/tomcat",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "1ad99fcf623a208d11b27a6d99e8b46d6091c4c310306f35bf6414deca78fb01",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "8080/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/1ad99fcf623a",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "4b453a7852e2d543e135ac1232464760a296e857e3f8b46f9d01d4500a0f8bb4",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "b15aa1ecc25828e428cfa89a3a33843e112499b5936fc4939336b2548244fd3f",
                    "EndpointID": "4b453a7852e2d543e135ac1232464760a296e857e3f8b46f9d01d4500a0f8bb4",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                },
                "tomcat-net": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [
                        "706eba52a567"
                    ],
                    "NetworkID": "e4b86298c1b57f26bc38a8c326347a999c0072a044f89427a3da0a3a3ff86315",
                    "EndpointID": "8b54d4d05487ade73362f8ebe389e638ac7153e59d3778d270900d9ec7824195",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:12:00:03",
                    "DriverOpts": {}
                }
            }
        }
    }
]

  • 经过上述操作,将Tomcat01加入到tomcat-net中后,我们来验证能否Ping通
// 进入到新的Tomcat中
docker exec -it custom-net-tomcat bash
// 获取容器的网络信息   
ip a

最后发现能够Ping通
在这里插入图片描述
网络模型最终的结果如下:
在这里插入图片描述

五、桥接网络 连接的 容器可以通过 Ping 容器名来连通,因为生成了DNS记录;对于普通的网络,则不能通过Ping容器名来连通。

如下为默认网络无法Ping通的验证:

docker exec -it tomcat01 ping 172.17.03
docker ps 
docker exec -it tomcat01 ping tomcat02

在这里插入图片描述

  • 使用自定义的桥接网络来新建两个容器
docker run -d --name tomcat11 --network tomcat-net tomcat
docker run -d --name tomcat22 --network tomcat-net tomcat

在这里插入图片描述

  • 查看两个新建的容器的ip
docker exec -it tomcat11 ip a ;
docker exec -it tomcat22 ip a

在这里插入图片描述

  • 桥接网络Ping通IP和容器名称的实验
    在这里插入图片描述

六、通过link技术增加一条DNS记录访问容器名称(与五结合这看)

docker rm -f tomcat01

docker run -d --name tomcat01 --link tomcat02 tomcat

docker exec -it tomcat01 ping tomcat02

在这里插入图片描述

结论:Docker中使用自定义桥接网络不仅能够解决互联互通的问题,而且能解决ping 容器名的问题。

七、Docker中网络的三种形式

桥接网络(bridge):
主机网络(host):
(None):

Docker网络(host、bridge、none)详细介绍

八、多机通信的原理

在这里插入图片描述

(1)使得两边的eth0能够通信
(2)前提要确保spring-boot-project container和mysql container的IP地址不一样
(3)将spring-boot-project中的所有信息当成eth0要传输给另外一端的信息
(4)具体通过vxlan技术实现
www.evoila.de/2015/11/06/what-is-vxlan-and-how-it-works
(5)处在vxlan的底层:underlay
处在xxlan的上层:overlay

在这里插入图片描述

多机网络通信的问题,底层一个实现技术是:overlay ------>vxlan
network namespace veth-pair 桥接模式 原理
bridge host null —> docker多机网络通信 overlay

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值