Docker系列六:Docke的link机制和自定义Bridge网络

===============Docker link机制=============
创建第二个容器的时候可以link到第一个容器上
docker run -d --name test1 busybox /bin/sh -c "while true; do sleep 3000; done"
docker run -d --name test2 --link test1 busybox /bin/sh -c "while true; do sleep 3000; 
test1:172.17.0.3
docker exec -it test2 /bin/sh
ping 172.17.0.3 	yes
ping test1 			yes

通过--link的方式相当于给test2添加了一个DNS解析记录
link只能是单向的链接2->1,2可以链接1,但是1不能链接2,可以ping

=======新建立一个bridge,让容器可以链接========
创建一个bridge
docker network create -d bridge my-bridge
查看是否生效:
[root@docker-node1 vagrant]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
568ffe71f516        bridge              bridge              local
022dc4f6024c        host                host                local
d38c463485d0        my-bridge           bridge              local
ece3e2f6126f        none                null                local

[root@docker-node1 vagrant]# brctl show
bridge name	bridge id		STP enabled	interfaces
br-d38c463485d0		8000.0242c1e917f6	no		
docker0		8000.02428143bc79	no		veth0a65b32
							            vethe487c80

br-d38c463485d0就是新创建的

创建一个容器,链接到指定的刚刚创建的my-bridge
docker run -d --name test3 --network my-bridge busybox /bin/sh -c "while true; do sleep 3000; done"

查看bridge的链接情况:
发现br-d38c463485d0有新的链接

[root@docker-node1 vagrant]# brctl show
bridge name	bridge id		STP enabled	interfaces
br-d38c463485d0		8000.0242c1e917f6	no		veth3bd9f01
docker0		8000.02428143bc79	no				veth0a65b32
												vethe487c80

568ffe71f516        bridge              bridge              local
022dc4f6024c        host                host                local
d38c463485d0        my-bridge           bridge              local
ece3e2f6126f        none                null                local


docker network inspect d38c463485d0

[
    {
        "Name": "my-bridge",
        "Id": "d38c463485d09b3b88ac4f7d27e2f0358f3e1b958d63ab7b59e06589ee824fd1",
        "Created": "2018-08-14T18:26:32.540856161+01: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": {
            "f77a7bc3f18386607bf50ca806a86d9123dfb257338f721be563245fd40a0edc": {
                "Name": "test3",
                "EndpointID": "b765427a577931e7a64b230a953e2a8295aeb71f6f245dbc4df1e19b4800d5ed",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

以上说明test3 链接上了my-bridge ip:172.18.0.2/16


将原来正在运行的容器网络更改一下。
例如之前链接的是docker0,现在改到my-bridge上
docker network connect my-bridge test2

这个时候再看:

docker network inspect d38c463485d0
 "Containers": {
            "649f8dbd53b99c47c58b627f11e96d7c45a5b9bbbe489996db017dc4e9dc2216": {
                "Name": "test2",
                "EndpointID": "dbb352f2218f1f2a49035400e7e59a6862bf473489855682f8b01469f3082936",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "f77a7bc3f18386607bf50ca806a86d9123dfb257338f721be563245fd40a0edc": {
                "Name": "test3",
                "EndpointID": "b765427a577931e7a64b230a953e2a8295aeb71f6f245dbc4df1e19b4800d5ed",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },

现在他既链接到docker0,也连接到了my-bridge
用户自定义的bridge ,相关容器链接上后是自动可以相互ping通的,不需要--link
这一点是区别于默认的docker0.

猜你喜欢

转载自blog.csdn.net/weixin_36171533/article/details/81677223