docker容器間互聯
阿新 • • 發佈:2021-06-25
通過容器名稱互聯
即在同一個宿主機上的容器之間可以通過自定義的容器名稱相互訪問,比如一個業務前端靜態頁面是使用nginx,動態頁面使用的是tomcat,由於容器在啟動的時候其內部IP地址是DHCP 隨機分配的,所以如果通過內部訪問的話,自定義名稱是相對比較固定的,因此比較適用於此場景。
啟動第一個容器
[root@mysql app1]# docker run -itd --name tomcat-web -p 8801:8080 tomcat-web:app1 b6471b4d34c6aeedcae1c1048632dc326acdd37d385b8afbaa3ace186e433c87
檢視容器的hosts檔案
[root@b6471b4d34c6 /]# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 b6471b4d34c6 1.1.1.1 test.com
啟動第二個容器,與第一個容器關聯
[root@mysql app1]# docker run -itd --name nginx-link --link tomcat-web nginx:v1 06f2bc85b84d65407f1cdb4ec73b3c8d3cff783883593185ac676064258703cb
檢視容器的hosts
[root@06f2bc85b84d /]# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 tomcat-web b6471b4d34c6 172.17.0.3 06f2bc85b84d
測試連通性
[root@06f2bc85b84d /]# pingtomcat-web PING tomcat-web (172.17.0.2) 56(84) bytes of data. 64 bytes from tomcat-web (172.17.0.2): icmp_seq=1 ttl=64 time=0.077 ms 64 bytes from tomcat-web (172.17.0.2): icmp_seq=2 ttl=64 time=0.089 ms ^C --- tomcat-web ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 31ms rtt min/avg/max/mdev = 0.077/0.083/0.089/0.006 ms [root@06f2bc85b84d /]# ping b6471b4d34c6 PING tomcat-web (172.17.0.2) 56(84) bytes of data. 64 bytes from tomcat-web (172.17.0.2): icmp_seq=1 ttl=64 time=0.040 ms 64 bytes from tomcat-web (172.17.0.2): icmp_seq=2 ttl=64 time=0.090 ms ^C --- tomcat-web ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 59ms rtt min/avg/max/mdev = 0.040/0.065/0.090/0.025 ms
通過自定義容器別名互聯
上一步驟中,自定義的容器名稱可能後期會發生變化,那麼一旦名稱發生變化,程式之間也要隨之發生變化,比如程式通過容器名稱進行服務呼叫,但是容器名稱發生變化之後再使用之前的名稱肯定是無法成功呼叫,每次都進行更改的話又比較麻煩,因此可以使用自定義別名的方式解決,即容器名稱可以隨意更,只要不更改別名即可,具體如下:
命令格式:
docker run -d --name 新容器名稱 --link 目標容器名稱:自定義的名稱 -p 本地埠:容器埠 映象名稱 shell命令
[root@mysql ~]# docker run -d --name test-link --link tomcat-web:java-server nginx:v1 41b4195710140a2ba45750dfd8bdf4953092d500d5edaf9034a83570890ab128 [root@mysql ~]# docker exec -it test-link bash [root@41b419571014 /]# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 java-server b6471b4d34c6 tomcat-web 172.17.0.4 41b419571014 [root@41b419571014 /]# ping java-server PING java-server (172.17.0.2) 56(84) bytes of data. 64 bytes from java-server (172.17.0.2): icmp_seq=1 ttl=64 time=0.052 ms 64 bytes from java-server (172.17.0.2): icmp_seq=2 ttl=64 time=0.091 ms ^C --- java-server ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 10ms