1. # 查看所有的网络
  2. [root@iZbp10cl07degikl645xkmZ ~]# docker network ls
  3. NETWORK ID NAME DRIVER SCOPE
  4. ce272e32269e bridge bridge local
  5. 298aa0e71be8 host host local
  6. baf8682c0d16 none null local
  7. [root@iZbp10cl07degikl645xkmZ ~]#

网络模式

bridge :桥接 docker(默认)
none :不配置网络
host :和宿主机共享网络
container : 容器网络连通!(用的少!局限很大)

测试

# 我们直接启动的命令 -net bridge ,而这个就是我们的docker0
docker run -d -P --name redis01 redis
等价于下面
docker run -d -P --name redis01 --net bridge redis

#docker0特点:默认域名不能访问,--link可以打通连接!

# 我们可以自定义一个网络
[root@s4801841 /]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
9690939da110307195d7a6e4f8492f53e4d237b0a38d80e6e980dd8509f8c44a
[root@s4801841 /]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
d46e1d6232eb        bridge              bridge              local
90ae387162f8        host                host                local
9690939da110        mynet               bridge              local
d5191bc49335        none                null                local
[root@s4801841 /]# 

# 这样我们的网络就创建成功了
[root@s4801841 /]# docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "9690939da110307195d7a6e4f8492f53e4d237b0a38d80e6e980dd8509f8c44a",
        "Created": "2020-11-30T17:39:58.140998293+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": {}
    }
]
[root@s4801841 /]#

测试

# 自用自己刚刚创建的网络mynet创建两个容器
[root@s4801841 /]# docker run -d -P --name redis03 --net mynet redis
a4470f0d93958b9229a42341440f9c59a392c18f183ada9032383bd7e0558111
[root@s4801841 /]# docker run -d -P --name redis04 --net mynet redis
85060a17c380482fd1c7f117cca8c96140bfe0accd59dd8a87027c85ed0ebded
[root@s4801841 /]# 

# 查看结果
[root@s4801841 /]# docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "9690939da110307195d7a6e4f8492f53e4d237b0a38d80e6e980dd8509f8c44a",
        "Created": "2020-11-30T17:39:58.140998293+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": { //这里就可以看到你刚刚通过这个网络所创建的容器了
            "85060a17c380482fd1c7f117cca8c96140bfe0accd59dd8a87027c85ed0ebded": {
                "Name": "redis04",
                "EndpointID": "7f958c1451c6f8295a40902f18a80fc03c679ca838149db93ebb2a1372fcbea6",
                "MacAddress": "02:42:c0:a8:00:03",
                "IPv4Address": "192.168.0.3/16",
                "IPv6Address": ""
            },
            "a4470f0d93958b9229a42341440f9c59a392c18f183ada9032383bd7e0558111": {
                "Name": "redis03",
                "EndpointID": "c3a29e0c468e003cee8711776488a09d7a8f58592aeab68f54e7d48da02a34ed",
                "MacAddress": "02:42:c0:a8:00:02",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
[root@s4801841 /]# 


# 再次测试ping连接(用redis好像不像这里我换成了tomcat的镜像)
# 现在不使用--link也可以ping名字了!
[root@s4801841 /]# docker exec -it tomcat01 ping tomcat02
PING tomcat02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.151 ms
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.126 ms
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.113 ms
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=4 ttl=64 time=0.099 ms
^C
--- tomcat02 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 0.099/0.122/0.151/0.020 ms
[root@s4801841 /]# ^C

我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络

好处:
redis-不同的集群使用不同的网络,保证集群是安全和健康的
mysql-不同的集群使用不同的网络,保证集群是安全和健康的

网络连通(将一个网络中的容器和另外一个网络打通)

# redis01 在bridge这个网络中
[root@s4801841 /]# docker network connect mynet redis01

#这样的话就实现了将bridge中的redis01容器与mynet网络打通
# 相当于一个容器两个ip
[root@s4801841 /]# docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "9690939da110307195d7a6e4f8492f53e4d237b0a38d80e6e980dd8509f8c44a",
        "Created": "2020-11-30T17:39:58.140998293+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": {
            "abde9abf6faba5c4aeb971c47e5605d7c7dd011d364c36ef5a2f59b7a8e833a2": {
                "Name": "redis01",
                "EndpointID": "79be417e2624d938b79b1a2a4092bf992d4aed4df446fb274d6956d929def286",
                "MacAddress": "02:42:c0:a8:00:04",
                "IPv4Address": "192.168.0.4/16",
                "IPv6Address": ""
            },
            "c27c76ffa895af56721b359d38228f7ee248b175b3709cdf2ae3e68603319e9b": {
                "Name": "tomcat02",
                "EndpointID": "6bb353e88f7f343096c66697d4e10039e20da96b202d201a969b1f9b63b88b41",
                "MacAddress": "02:42:c0:a8:00:03",
                "IPv4Address": "192.168.0.3/16",
                "IPv6Address": ""
            },
            "e722b385bf24e3605ce74955cdbee1ebfce2af3fff5777b81fa438623b93b5d7": {
                "Name": "tomcat01",
                "EndpointID": "81c46bb9b3099a91f350f9bc18ca793f1518c8a602b7e325a77111544aa0053a",
                "MacAddress": "02:42:c0:a8:00:02",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
[root@s4801841 /]#

结论:

假设要跨网络操作别人。就需要使用docker network connect 连通