===============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.