从零开始学习docker(三)link
擼了今年阿里、頭條和美團(tuán)的面試,我有一個(gè)重要發(fā)現(xiàn).......>>>
需求
? ? 我們有兩個(gè)容器,一個(gè)容器啟動(dòng)的后臺(tái)服務(wù),一個(gè)容器啟動(dòng)的mysql服務(wù)。后臺(tái)服務(wù)必須知道m(xù)ysql服務(wù)的IP地址是什么。但在開(kāi)發(fā)的過(guò)程中,我們并不知道我們mysql數(shù)據(jù)庫(kù)的ip地址是多少。
解決辦法
????我們可以給mysql一個(gè)名字,通過(guò)名字訪問(wèn)容器,名字是固定的。把第二個(gè)容器link到第一個(gè)容器上面,在第一個(gè)容器上面只需要通過(guò)name就可以訪問(wèn)了。
我們將上一節(jié)中的test2容器停止并且刪除:
iie4bu@hostdocker:~$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d85b091d4deb ubuntu:xenial "/bin/bash -c 'while…" 4 hours ago Up 4 hours test2 b21a9d817e25 ubuntu:xenial "/bin/bash -c 'while…" 4 hours ago Up 4 hours test1 iie4bu@hostdocker:~$ docker container stop test2 test2 iie4bu@hostdocker:~$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b21a9d817e25 ubuntu:xenial "/bin/bash -c 'while…" 4 hours ago Up 4 hours test1 iie4bu@hostdocker:~$ docker container rm test2 test2 iie4bu@hostdocker:~$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b21a9d817e25 ubuntu:xenial "/bin/bash -c 'while…" 4 hours ago Up 4 hours test1我們新建test2容器,并將test2容器link到test1容器上面。
iie4bu@hostdocker:~$ sudo docker run -d --name test2 --link test1 ubuntu:xenial /bin/bash -c "while true; do sleep 3600; done" --link的格式: --link <name or id>:alias 其中,name和id是源容器的name和id,alias是源容器在link下的別名。我們?cè)趖est2中可以ping通test1的IP地址的。
root@7fe6f95d2992:/# ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.094 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.062 ms 64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.062 ms 64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.062 ms 64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.059 ms此外我們?cè)趖est2中是不是可以ping通test1的名字呢?答案是可以的
root@7fe6f95d2992:/# ping test1 PING test1 (172.17.0.2) 56(84) bytes of data. 64 bytes from test1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.093 ms 64 bytes from test1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.061 ms 64 bytes from test1 (172.17.0.2): icmp_seq=3 ttl=64 time=0.063 ms ^C --- test1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1998ms原因就是我們使用--link的方式,給test2添加了一個(gè)dns的一個(gè)記錄。這樣在test2中不需要知道test1的具體ip地址了。只需要知道名字就行。
然而我們?cè)趖est1中是無(wú)法根據(jù)test2的名字ping通的。因?yàn)閘ink是有方向的。
使用link的方式在生產(chǎn)環(huán)境中并不常見(jiàn),后面介紹常見(jiàn)的解決辦法。
總結(jié)
以上是生活随笔為你收集整理的从零开始学习docker(三)link的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 从零开始学习docker(二)网络
- 下一篇: 从零开始搭建spring-cloud(3