从零开始学习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的方式在生产环境中并不常见,后面介绍常见的解决办法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值