docker命令之link

1.新建兩臺容器,第二臺(busybox_2)link到第一臺(busybox_1)
[root@localhost ~]# docker run -d -it --name busybox_1 busybox /bin/sh -c "while true;do sleep 3600;done" 8240c9aa04e3b5653c6747ae13a4e4478eb8e62060e4c8644492dbbf5c71c734 [root@localhost ~]# docker run -d -it --name busybox_2 --link busybox_1 busybox /bin/sh -c "while true;do sleep 3600;done" 9131353a28de9c0816121f0960644275d789e4dfe136a00cff6b0d9850b35c7e
2.獲取兩臺容器的IP地址

[root@localhost ~]# docker exec -it busybox_1 ip a|grep 172
inet 172.17.0.2/16 scope global eth0
[root@localhost ~]# docker exec -it busybox_2 ip a|grep 172
inet 172.17.0.3/16 scope global eth0docker

3.分別在兩臺容器上經過ip和容器名稱ping另外一臺容器,注意查看結果
[root@localhost ~]# docker exec -it busybox_1 ping -c 1 172.17.0.3 PING 172.17.0.3 (172.17.0.3): 56 data bytes 64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.079 ms [root@localhost ~]# docker exec -it busybox_1 ping -c 1 buxybox_2 ping: bad address 'buxybox_2' [root@localhost ~]# docker exec -it busybox_2 ping -c 1 172.17.0.2  PING 172.17.0.2 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.089 ms [root@localhost ~]# docker exec -it busybox_2 ping -c 1 busybox_1 PING busybox_1 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.088 ms
4.刪除被link的容器,查看結果
[root@localhost ~]# docker rm -f busybox_1 busybox_1 [root@localhost ~]# docker exec -it busybox_2 ping busybox_1 Error response from daemon: Cannot link to a non running container: /busybox_1 AS /busybox_2/busybox_1 [root@localhost ~]# docker run -d -it --name busybox_1 busybox /bin/sh -c "while true;do sleep 3600;done" 74088ba7c2f9db67a607185d9a0b2157098036c1a2ca7b200c41ec04685f1210 [root@localhost ~]# docker exec -it busybox_2 ip a Error response from daemon: Cannot link to a non running container: /busybox_1 AS /busybox_2/busybox_1
5.查看當前docker 可以使用網絡
[root@localhost ~]# docker network ls  #若是容器沒有顯示指定使用的網絡,默認使用bridge NETWORK ID NAME DRIVER SCOPE fa30a4d17b5b bridge bridge local a03aaca35833 host host local d85c50eb947c none null                local
6.手動建立一個docker網絡
[root@localhost ~]#  docker network create -d bridge my_bridge  #-d 指定類型 my_bridge爲名稱 652b4f64a3bc7691e8b65a8a7508e83e7585cde9d698438bc971a3c63bd6d62d
7.驗證是否建立成功
[root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE fa30a4d17b5b bridge bridge local a03aaca35833 host host local 652b4f64a3bc my_bridge bridge local d85c50eb947c none null local [root@localhost ~]# brctl show bridge name bridge id STP enabled interfaces br-652b4f64a3bc        8000.0242a1ad4372    no              #652...即my_bridge的ID,當前沒有被鏈接 docker0 8000.024223c091f9 no veth54f7336 veth7ca4b55
8.新建一個容器,使用咱們剛剛新建的my_bridge網絡
[root@localhost ~]# docker run -d -it --name busybox_3 --network my_bridge  busybox /bin/sh -c "while true;do sleep 3600;done" 749b800c24708539fefbc462bbf4463fde5cdbd7b6e8787383e586342fc2977b  #使用 --network指定網絡
9.驗證剛剛的操做
[root@localhost ~]# brctl show bridge name        bridge id STP enabled interfaces br-652b4f64a3bc        8000.0242a1ad4372 no veth72d2357 docker0      8000.024223c091f9 no veth54f7336                  veth7ca4b55 [root@localhost ~]# docker network inspect my_bridge ...... "Containers": { "749b800c24708539fefbc462bbf4463fde5cdbd7b6e8787383e586342fc2977b": { "Name": "busybox_3",  #名稱 "EndpointID": "22aac7ec5076908c40ebc8175bd307b6174b94f709240743d36540fe90220c1b", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16",  #IP地址,發現其網段爲18,與以前建立的容器網段不一樣 "IPv6Address": "" } }, ......
10.將已存在的容器加入my_bridge網絡並驗證
[root@localhost ~]# docker network connect my_bridge busybox_2 [root@localhost ~]# docker network inspect my_bridge ...... "Containers": { "749b800c24708539fefbc462bbf4463fde5cdbd7b6e8787383e586342fc2977b": { "Name": "busybox_3", "EndpointID": "22aac7ec5076908c40ebc8175bd307b6174b94f709240743d36540fe90220c1b", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" }, "9131353a28de9c0816121f0960644275d789e4dfe136a00cff6b0d9850b35c7e": { "Name": "busybox_2", "EndpointID": "e2fbd16d9a6ba1495a4e9907153e0dae619f172c70f890382b1007d0f4d7e6a6", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" } }, ...... [root@localhost ~]# brctl show bridge name    bridge id STP enabled interfaces br-652b4f64a3bc        8000.0242a1ad4372 no veth72d2357 veth798a93a docker0 8000.024223c091f9 no veth54f7336 veth7ca4b55
11.基於當前的網絡狀態,測試各容器之間的網絡通訊狀態,主要觀察結果
當前的容器名稱及IP爲: name:busybox_1 IP:172.17.0.2/16(bridge) name:busybox_2 IP:172.17.0.3/16(bridge) 172.18.0.3/16(my_bridge) name:busybox_3 IP:172.18.0.2/16(my_bridge) 在busybox_1上: [root@localhost ~]# docker exec -it busybox_1 ping -c 1 172.17.0.3 [root@localhost ~]# docker exec -it busybox_1 ping -c 1 172.18.0.3 [root@localhost ~]# docker exec -it busybox_1 ping -c 1 172.18.0.2 [root@localhost ~]# docker exec -it busybox_1 ping -c 1 busybox_2 [root@localhost ~]# docker exec -it busybox_1 ping -c 1 busybox_3 在busybox_2上: [root@localhost ~]# docker exec -it busybox_2  ping -c 1 172.17.0.2 [root@localhost ~]# docker exec -it busybox_2  ping -c 1 172.18.0.2 [root@localhost ~]# docker exec -it busybox_2  ping -c 1 busybox_1 [root@localhost ~]# docker exec -it busybox_2  ping -c 1 busybox_3 在busybox_3上: [root@localhost ~]# docker exec -it busybox_3  ping -c 1 172.17.0.2 [root@localhost ~]# docker exec -it busybox_3  ping -c 1 172.17.0.3 [root@localhost ~]# docker exec -it busybox_3  ping -c 1 172.18.0.3 [root@localhost ~]# docker exec -it busybox_3  ping -c 1 busybox_1 [root@localhost ~]# docker exec -it busybox_3  ping -c 1 busybox_2
12.新建一個容器,使用my_bridge網絡
[root@localhost ~]# docker run -d -it --name busybox_4 --network my_bridge  busybox /bin/sh -c "while true;do sleep 3600;done" c831ad0d4f25ab7b8d44904ea9cb9c1cff3ddb842043b070dbabe8be1df38d75
13.測試最後新建容器與其餘容器的網絡通訊
[root@localhost ~]# docker exec -it busybox_4  ping -c 1 172.18.0.1 [root@localhost ~]# docker exec -it busybox_4  ping -c 1 172.18.0.2 [root@localhost ~]# docker exec -it busybox_4  ping -c 1 172.18.0.3 [root@localhost ~]# docker exec -it busybox_4  ping -c 1 busybox_1 [root@localhost ~]# docker exec -it busybox_4  ping -c 1 busybox_2 [root@localhost ~]# docker exec -it busybox_4  ping -c 1 busybox_3
 總結:
1.當咱們新建容器時,若是沒有顯示指定其使用的網絡,那麼默認會使用bridge網絡
2.當一個容器link到另外一個容器時,該容器能夠經過IP或容器名稱訪問被link的容器,而被link容器能夠經過IP訪問該容器,可是沒法經過容器名稱訪問
3.當被link的容器被刪除時,建立link的容器也沒法正常使用
4.若是兩個容器被加入到咱們手動建立的網絡時,那麼該網絡內的容器相互直接能夠經過IP和名稱同時訪問。
相關文章
相關標籤/搜索