6. Docker容器互联2---通过link互联

Docker Link

IP直接通讯

Dcoker 容器之间默认是支持通过IP互联的

 

我们查看一个容器的IP

[docker@VM_121_116_centos ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
bb1d9cd3a282        redis               "docker-entrypoint..."   22 hours ago        Up 29 seconds       0.0.0.0:26379->6379/tcp   tworedis
6636fb7d293c        redis               "docker-entrypoint..."   23 hours ago        Up 40 seconds       0.0.0.0:6379->6379/tcp    oneredis
[docker@VM_121_116_centos ~]$ docker exec -it oneredis /bin/bash
root@6636fb7d293c:/data# 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	6636fb7d293c
root@6636fb7d293c:/data# exit
exit
[docker@VM_121_116_centos ~]$ 

得到 IP

进入另一个容器 ping 一下

先安装一下ping 的依赖

[docker@VM_121_116_centos ~]$ docker exec -it tworedis /bin/bash
root@bb1d9cd3a282:/data# apt-get update
Ign:2 http://cdn-fastly.deb.debian.org/debian stretch InRelease                                    
Get:3 http://cdn-fastly.deb.debian.org/debian stretch-updates InRelease [91.0 kB]   
==================================省略==============================                                                                                                                         
Reading package lists... Done
root@bb1d9cd3a282:/data# apt-get install inetutils-ping
==================================省略=============================
After this operation, 390 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y  
Get:1 http://cdn-fastly.deb.debian.org/debian stretch/main amd64 netbase all 5.4 [19.1 kB]
Get:2 http://cdn-fastly.deb.debian.org/debian stretch/main amd64 inetutils-ping amd64 
===================================省略==============================
Setting up inetutils-ping (2:1.9.4-2+b1) ...
root@bb1d9cd3a282:/data# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.082 ms
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.068 ms
^C--- 172.17.0.2 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.068/0.075/0.082/0.000 ms
root@bb1d9cd3a282:/data# 

验证是可以成功的

问题:

上面例子我们是通过容器IP直接互联的吗, 但是容器重新启动后 IP是会改变的,这个时候就没招了

使用link通讯

使用 -link 容器name:容器别名 , 就相当于给容器加了一个 DNS 解析, 会把容器(name) 和设置的别名(alias) 解析成对应容器现在的IP.  

实验一下

停掉刚刚的 tworedis

[root@VM_121_116_centos ~]# docker run -p 26379:6379 --link oneredis:one --name tworedis  -it redis /bin/bash
root@f1fc80e69bab:/data# apt-get update

root@f1fc80e69bab:/data# apt-get install inetutils-ping

root@f1fc80e69bab:/data# ping one
PING one (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.117 ms
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.123 ms
^C--- one ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.117/0.120/0.123/0.000 ms
root@f1fc80e69bab:/data# ping oneredis
PING one (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.076 ms
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.082 ms
^C--- one ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.076/0.079/0.082/0.000 ms
root@f1fc80e69bab:/data# 

可以发现name和别名都能联通

看看 tworedis的host

root@f1fc80e69bab:/data# cat /etc/hosts

同时在 /etc/host 能发现映射, oneredis的容器ID, name, 别名都有的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值