1. 程式人生 > 其它 >docker容器間互聯

docker容器間互聯

通過容器名稱互聯

即在同一個宿主機上的容器之間可以通過自定義的容器名稱相互訪問,比如一個業務前端靜態頁面是使用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 /]# ping
tomcat-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