14、 创建自定义网络

  在我们通过docker run创建容器的时候默认就会去使用docker bridge的网络;其实在我们创建容器的时候是可以指定容器使用的网络的,并且我们也可以创建一个自定义的网络,在创建容器的时候指定使用我们自己创建的网络。

[root@docker ~]# docker network create -d bridge my-bridge
380c3f9ac371750664df0e61245a93ea3eb785aa59d90dc3223e8a6cba03a118
[root@docker ~]# brctl show  # 没有该命令的需要通过`yum install bridge-utils -y`安装
NETWORK ID          NAME                DRIVER              SCOPE
60e81719174c        bridge              bridge              local
67f0fa7f22b0        host                host                local
380c3f9ac371        my-bridge           bridge              local
01f3c01c3ade        none                null                local
[root@docker ~]# docker network ls
bridge name	bridge id		STP enabled	interfaces
br-380c3f9ac371		8000.02424dd4b4b7	no
docker0		8000.02420c4725c2	no		veth2e7a7c3
							            veth6c15790
[root@docker ~]# 

14.1 新建容器并指定使用自定义的网络

docker run -d --name test3 --network my-bridge busybox /bin/sh -c "while true;do sleep 3600;done"

  查看网络信息:

[root@docker ~]# brctl show
bridge name	        bridge id		STP enabled	interfaces
br-380c3f9ac371		8000.02424dd4b4b7	no		vethf1bb3b3
docker0		        8000.02420c4725c2	no		veth2e7a7c3
							                    veth6c15790
[root@docker ~]# ip a|grep vethf1bb3b3
184: vethf1bb3b3@if183: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-380c3f9ac371 state UP
[root@docker ~]# docker network inspect 380c3f9ac371
[
    {
        "Name": "my-bridge",
        "Id": "380c3f9ac371750664df0e61245a93ea3eb785aa59d90dc3223e8a6cba03a118",
        "Created": "2018-06-06T12:58:16.075454193+07:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "1a7e1b2aed10c47e0e04b6c8bf11bef6bfcda8edd21644defff01302b977479d": {
                "Name": "test3",
                "EndpointID": "3ae8e776e83660fc1013e841cabbad819b523687b3ebf098e2dbbb00d4aeb266",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
[root@docker ~]# 

14.2 修改已存在的容器到其他网络

[root@docker ~]# docker network connect my-bridge test2
[root@docker ~]# docker network inspect 380c3f9ac371
[
    {
        "Name": "my-bridge",
        "Id": "380c3f9ac371750664df0e61245a93ea3eb785aa59d90dc3223e8a6cba03a118",
        "Created": "2018-06-06T12:58:16.075454193+07:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "1a7e1b2aed10c47e0e04b6c8bf11bef6bfcda8edd21644defff01302b977479d": {
                "Name": "test3",
                "EndpointID": "3ae8e776e83660fc1013e841cabbad819b523687b3ebf098e2dbbb00d4aeb266",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "74d1dac13943effb5d5c3549b988d3b77049a99df88c3a7147d29623c1cb1099": {
                "Name": "test2",
                "EndpointID": "60400ff4299d8a469a6bb88229f0ccc919612483e20fe3474a8e7eab29e2f74e",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
[root@docker ~]# 

  修改完之后,查看原先默认使用的bridge网络信息:

[root@docker ~]# docker network inspect 60e81719174c
[
    {
        "Name": "bridge",
        "Id": "60e81719174cd81800981dba54d9dd97e0df639e128abb92605ca2828f4f3d06",
        "Created": "2018-05-31T16:47:33.917919725+07: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": {
            "74d1dac13943effb5d5c3549b988d3b77049a99df88c3a7147d29623c1cb1099": {
                "Name": "test2",
                "EndpointID": "e5be5981ad5138aeb469e24ce8e79b1752f30e5ab51befdc68930ae01b63de42",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "a10b6f5afb766f59550650656e29cf9fc1dff2c63978ceae02bdd92b367f329a": {
                "Name": "test1",
                "EndpointID": "8e4b12841f72614d2df2d6b5b53da197847655e09f7bfa84c1e2ed78dd329759",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/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": {}
    }
]
[root@docker ~]# 

  可以发现,test2既在bridge网络中也在my-bridge网络中。检查一下是否既可以通过IP访问也可以通过容器名访问:

[root@docker ~]# docker exec -it test3 /bin/sh

/ # ping 172.18.0.3
PING 172.18.0.3 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.126 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.093 ms
^C
--- 172.18.0.3 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.093/0.109/0.126 ms
/ # ping test2
PING test2 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.071 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.126 ms
^C
--- test2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.071/0.098/0.126 ms
/ #


[root@docker ~]# docker exec -it test2 /bin/sh
/ # ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.075 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.094 ms
^C
--- 172.18.0.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.075/0.084/0.094 ms
/ # ping test3
PING test3 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.072 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.104 ms
^C
--- test3 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.072/0.088/0.104 ms
/ # ping test1
ping: bad address 'test1'
/ #

  将test1也连接到my-bridge中:

[root@docker ~]# docker network connect my-bridge test1
[root@docker ~]# docker exec -it test2 /bin/sh
/ # ping test1
PING test1 (172.18.0.4): 56 data bytes
64 bytes from 172.18.0.4: seq=0 ttl=64 time=0.097 ms
64 bytes from 172.18.0.4: seq=1 ttl=64 time=0.086 ms
64 bytes from 172.18.0.4: seq=2 ttl=64 time=0.083 ms
^C
--- test1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.083/0.088/0.097 ms
/ # ping test3
PING test3 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.072 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.085 ms
64 bytes from 172.18.0.2: seq=2 ttl=64 time=0.095 ms
^C
--- test3 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.072/0.084/0.095 ms
/ #

  事实证明:两个容器之间使用的都是自定义的网络,那么他们之间就相当于添加了一个双向的link。即可以通过IP访问,也可以通过容器名访问。

posted @ 2019-01-16 22:10  StaryJie  阅读(657)  评论(0编辑  收藏  举报