从零开始学习docker(三)link
生活随笔
收集整理的這篇文章主要介紹了
从零开始学习docker(三)link
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
擼了今年阿里、頭條和美團的面試,我有一個重要發現.......>>>
需求
? ? 我們有兩個容器,一個容器啟動的后臺服務,一個容器啟動的mysql服務。后臺服務必須知道mysql服務的IP地址是什么。但在開發的過程中,我們并不知道我們mysql數據庫的ip地址是多少。
解決辦法
????我們可以給mysql一個名字,通過名字訪問容器,名字是固定的。把第二個容器link到第一個容器上面,在第一個容器上面只需要通過name就可以訪問了。
我們將上一節中的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下的別名。我們在test2中可以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此外我們在test2中是不是可以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添加了一個dns的一個記錄。這樣在test2中不需要知道test1的具體ip地址了。只需要知道名字就行。
然而我們在test1中是無法根據test2的名字ping通的。因為link是有方向的。
使用link的方式在生產環境中并不常見,后面介紹常見的解決辦法。
總結
以上是生活随笔為你收集整理的从零开始学习docker(三)link的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零开始学习docker(二)网络
- 下一篇: 从零开始搭建spring-cloud(3