docker|docker0 --link

1 理解docker0

1.1 操作

先清空所有环境

docker rm -f $(docker ps -aq)
docker rmi -f $(docker images -aq)

测试

ip addr

在这里插入图片描述
创建一个容器,
容器内:
在这里插入图片描述
主机ping容器:

root@xiaoni-01:~# ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.037 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.047 ms
64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.028 ms
64 bytes from 172.17.0.3: icmp_seq=4 ttl=64 time=0.045 ms
64 bytes from 172.17.0.3: icmp_seq=5 ttl=64 time=0.046 ms
64 bytes from 172.17.0.3: icmp_seq=6 ttl=64 time=0.039 ms
64 bytes from 172.17.0.3: icmp_seq=7 ttl=64 time=0.047 ms

1.2 原理

我们每次启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0桥接模式,使用的技术是evth-pair技术。
再在主机上测试 ip addr
发现:
在这里插入图片描述
可以发现,在主机和容器内分别使用ip addr,出现一对网卡,这里显示为133-132。
我们发现这个容器所带来的网卡是一对一对的,veth-pair就是一对的虚拟设备接口,他们成对出现,一段连着协议,一段彼此相连。相当于一个桥梁

容器和容器之间也可以相互通信
并不是直连,通过主机(路由器)转发
并不是直连,通过主机(路由器)转发
在这里插入图片描述
重要删除容器,对应的虚拟网卡也会消失。

2 --link

场景:编写一个微服务,database url=ip,项目不重启,数据库ip换了,我们希望可以处理这个问题,是否可以用名字来访问容器。

[root@9559c91ca761 /]# ping centos03
ping: centos03: Name or service not known    //在centos02中不能直接pingcentos03

root@xiaoni-01:~# docker run -dit -P --name centos04 --link centos03 centos:7   //进行连接
581451397c27245af4152c7c27f96bc5bf15c097629c424f7fccbe1d9de922ac
root@xiaoni-01:~# docker exec -it 581451397c272 ping centos03   //直接ping
PING centos03 (172.17.0.2) 56(84) bytes of data.
64 bytes from centos03 (172.17.0.2): icmp_seq=1 ttl=64 time=0.076 ms
64 bytes from centos03 (172.17.0.2): icmp_seq=2 ttl=64 time=0.056 ms
64 bytes from centos03 (172.17.0.2): icmp_seq=3 ttl=64 time=0.063 ms
64 bytes from centos03 (172.17.0.2): icmp_seq=4 ttl=64 time=0.067 ms
64 bytes from centos03 (172.17.0.2): icmp_seq=5 ttl=64 time=0.058 ms
64 bytes from centos03 (172.17.0.2): icmp_seq=6 ttl=64 time=0.050 ms
64 bytes from centos03 (172.17.0.2): icmp_seq=7 ttl=64 time=0.057 ms

但是centos03没办法平通centos04。

探究
查看bridge,也就是docker0的信息,此时ID为ac51e0364ebf
在这里插入图片描述
在这里插入图片描述
三个容器

root@xiaoni-01:~# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
581451397c27   centos:7   "/bin/bash"   35 minutes ago   Up 35 minutes             centos04
b77ab5cb0c8a   centos:7   "/bin/bash"   37 minutes ago   Up 37 minutes             centos03
9559c91ca761   centos:7   "/bin/bash"   3 hours ago      Up 3 hours                centos02
root@xiaoni-01:~# docker exec -it 581451397c27 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      centos03 b77ab5cb0c8a   //!!!!!!!!  直接写死了
172.17.0.4      581451397c27

域名挟持
究其本源:–link就是我们在hosts配置中增加了一个172.17.0.2 centos03 b77ab5cb0c8a
但是现在不推荐使用–link了
docker0的问题:不支持容器名连接访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoni61

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值