本文章來(lái)自【知識(shí)林】
在前面例子中容器與容器之間的通信都是通過(guò)網(wǎng)絡(luò)中的IP地址來(lái)完成的,這種方式顯然是不合理的,因?yàn)檫@個(gè)IP地址可能會(huì)在啟動(dòng)容器時(shí)發(fā)生變化,而且也比較難記逻澳。
那么解決這一問(wèn)題的方法就是使用網(wǎng)絡(luò)別名,容器在網(wǎng)絡(luò)是是允許有別名的暖呕,且這個(gè)別名在所在網(wǎng)絡(luò)中都可以直接訪(fǎng)問(wèn)斜做,這就類(lèi)似局域網(wǎng)在各物理機(jī)的主機(jī)名。
- 啟動(dòng)容器指定網(wǎng)絡(luò)及網(wǎng)絡(luò)別名
docker run -d -it --name c4 --network test-net --network-alias c4-alias centos /bin/bash -c "while true; do echo hello; sleep 1; done"
e51b0ccd566709595c136d3ec41a72652843880184052324e5702bbdc82e0c22
說(shuō)明:使用--network
來(lái)指定網(wǎng)絡(luò)湾揽,使用--network-alias
來(lái)指定網(wǎng)絡(luò)別名陨享,也就是說(shuō)c4
這個(gè)容器在test-net
這個(gè)網(wǎng)絡(luò)中的別名是c4-alias
,在這個(gè)網(wǎng)絡(luò)中的其他容器可以通過(guò)這個(gè)別名來(lái)訪(fǎng)問(wèn)該容器钝腺。
- 查看網(wǎng)絡(luò)中的容器
C:\Users\zsl-pc>docker network inspect test-net
…………
"Containers": {
"0968be0ab042ec35121774227bbecf5c5fd8a1faf0f7fd3b5ac0069af64e7709": {
"Name": "c3",
"EndpointID": "1a2062123d61774cd49d074f5dc8705fd0189c24657c7eb2002de4ad908810f0",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"7117f84edc269c5f61052a136791e775e26372c2b977db77081cd78533e5721e": {
"Name": "c2",
"EndpointID": "f3c3a919d92c1213da1a13879e75e4e2fe09ed619c65abad0751f8e76f19c2d9",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"e51b0ccd566709595c136d3ec41a72652843880184052324e5702bbdc82e0c22": {
"Name": "c4",
"EndpointID": "ab60608e5f26d370b71eb3f4e051f133649de35dff1bae0dcbec17684dca7cb5",
"MacAddress": "02:42:ac:12:00:04",
"IPv4Address": "172.18.0.4/16",
"IPv6Address": ""
}
}
…………
說(shuō)明:可以看出現(xiàn)在在test-net
中已經(jīng)有三個(gè)容器了。
- 查看容器詳情信息
C:\Users\zsl-pc>docker inspect c4
…………
"Networks": {
"test-net": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"c4-alias",
"e51b0ccd5667"
],
"NetworkID": "39b38d32553cb89085bccb6d1359e3e1ebba570147c31c64c58e40d7967f9e50",
"EndpointID": "ab60608e5f26d370b71eb3f4e051f133649de35dff1bae0dcbec17684dca7cb5",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.4",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:04"
}
}
…………
說(shuō)明:通過(guò)查看c4
的詳情信息可以看出赞厕,在Networks
里面可以看到該容器所擁有的網(wǎng)絡(luò)為test-net
(這是使用--network
來(lái)指定的)艳狐,在test-net
里面可以看到Aliases
里面有個(gè)c4-alias
(這是使用--network-alias
來(lái)指定的),說(shuō)明c4
的網(wǎng)絡(luò)別名已經(jīng)設(shè)置好了皿桑。
- 通過(guò)網(wǎng)絡(luò)別名與其他容器通信
進(jìn)入test-net
網(wǎng)絡(luò)中的任意容器(這里選擇c3
)測(cè)試與c4
通信:
C:\Users\zsl-pc>docker exec -it c3 /bin/bash
[root@0968be0ab042 /]# ping -w 4 172.18.0.4
PING 172.18.0.4 (172.18.0.4) 56(84) bytes of data.
64 bytes from 172.18.0.4: icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from 172.18.0.4: icmp_seq=2 ttl=64 time=0.074 ms
64 bytes from 172.18.0.4: icmp_seq=3 ttl=64 time=0.122 ms
64 bytes from 172.18.0.4: icmp_seq=4 ttl=64 time=0.079 ms
--- 172.18.0.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 0.071/0.086/0.122/0.022 ms
[root@0968be0ab042 /]# ping -w 4 c4-alias
PING c4-alias (172.18.0.4) 56(84) bytes of data.
64 bytes from c4.test-net (172.18.0.4): icmp_seq=1 ttl=64 time=0.040 ms
64 bytes from c4.test-net (172.18.0.4): icmp_seq=2 ttl=64 time=0.060 ms
64 bytes from c4.test-net (172.18.0.4): icmp_seq=3 ttl=64 time=0.117 ms
64 bytes from c4.test-net (172.18.0.4): icmp_seq=4 ttl=64 time=0.084 ms
--- c4-alias ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 0.040/0.075/0.117/0.029 ms
[root@0968be0ab042 /]#
說(shuō)明:可以看出在c3
容器中可以通過(guò)c4
的IP地址或網(wǎng)絡(luò)別名與之通信毫目。
- 以
connect
的方式來(lái)指定網(wǎng)絡(luò)別名
docker network connect --alias c1-alias test-net c1
說(shuō)明:使用docker network connect
來(lái)使容器加入指定網(wǎng)絡(luò),通過(guò)--alias
來(lái)指定該容器在指定網(wǎng)絡(luò)中的別名诲侮。
進(jìn)入c2
進(jìn)進(jìn)行測(cè)試:
C:\Users\zsl-pc>docker exec -it c2 /bin/bash
[root@7117f84edc26 /]# ping -w 2 c1-alias
PING c1-alias (172.18.0.5) 56(84) bytes of data.
64 bytes from c1.test-net (172.18.0.5): icmp_seq=1 ttl=64 time=0.056 ms
64 bytes from c1.test-net (172.18.0.5): icmp_seq=2 ttl=64 time=0.297 ms
--- c1-alias ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 0.056/0.176/0.297/0.121 ms
[root@7117f84edc26 /]# ping -w 2 c4-alias
PING c4-alias (172.18.0.4) 56(84) bytes of data.
64 bytes from c4.test-net (172.18.0.4): icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from c4.test-net (172.18.0.4): icmp_seq=2 ttl=64 time=0.060 ms
--- c4-alias ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.060/0.063/0.066/0.003 ms
網(wǎng)絡(luò)別名在整個(gè)網(wǎng)絡(luò)中都是有效的镀虐,即在同網(wǎng)絡(luò)中的任意容器都可通過(guò)網(wǎng)絡(luò)別名訪(fǎng)問(wèn)對(duì)應(yīng)容器。
本文章來(lái)自【知識(shí)林】