vethpair:成对出现的一种虚拟网络设备,数据从一端进,从另一端出。用于解决网络命名空间之间隔离。
docker0:网桥是一个二层网络设备,通过网桥可以将Linux支持的不同端口连接起来,并实现类似交换机那样的多对多的通信。
理解Docker0做这一步先把所有镜像和容器删干净
删除全部镜像:dockerrmi$(dockerimages-aq)
删除全部容器:dockerrm-f$(dockerps-aq)
三个网络查看容器的内部地址ipaddr
[root
localhost/]#dockerexec-ittomcat01ipaddr遇到问题,查看容器的内部地址出错
[root
localhost/]#dockerexec-ittomcat01ipaddrOCIruntimeexecfailed:execfailed:container_linux.go:80:startingcontainerprocesscaused:exec:"ip":executablefilenotfoundin$PATH:unknown
解决问题:1、进入容器输入安装依赖
root
cf4e8dd:/usr/local/tomcat#aptupdateroot
cf4e8dd:/usr/local/tomcat#aptinstall-yiproute22、再次测试成功
[root
localhost/]#dockerexec-ittomcat01ipaddr1:lo:LOOPBACK,UP,LOWER_UPmtuqdiscnoqueuestateUNKNOWNgroupdefaultqlen
link/loopback00:00:00:00:00:00brd00:00:00:00:00:00
inet.0.0.1/8scopehostlo
valid_lftforeverpreferred_lftforever
2:eth0
if9:BROADCAST,MULTICAST,UP,LOWER_UPmtuqdiscnoqueuestateUPgroupdefaultlink/ether02:42:ac:11:00:02brdff:ff:ff:ff:ff:fflink-netnsid0
inet.17.0.2/16brd.17..scopeglobaleth0
valid_lftforeverpreferred_lftforever
结果:Linux可以ping通docker容器内部
原理原理一1.我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0桥接模式,使用的技术是evth-pair技术!再次测试ipaddr
原理二2、#我们发现这个容器带来的网卡,都是一对对的
#evth-pair就是一对虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连
#正因为有这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备的
#OpenStac,Docker容器之间的连接,OVS的连接,都是使用evth-pair技术
原理三.我们来测试下tomcat01和tomcat02是否可以ping通!
[root
localhost/]#dockerexec-ittomcat02ping.18.0.2#结论:容器和容器之间是可以互相通信的!
绘制一个网络模型图:结论1、tomcat1和tomcat02是公用的一个路由器,docker0.
2、所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用IP
、Docker中的所有的网络接口都是虚拟的。虚拟的转发效率高!(内网传递文件!)
只要容器删除,对应网桥一对就没了!
使用--link连接思考一个场景,我们编写了一个微服务,databaseurl=ip;,项目不重启,数据库ip换掉了,我们希望可以处理这个问题,可以用名字来访问容器?
测试使用ping容器名出错
[root
localhost/]#dockerexec-ittomcat0pingtomcat02OCIruntimeexecfailed:execfailed:container_linux.go:80:startingcontainerprocesscaused:exec:"ping":executablefilenotfoundin$PATH:unknown
解决报错问题1、进入容器内
dockerexec-it容器自定义名称/bin/bash
2、运行下面命令
apt-getupdate
、出现bash:ping: