docker run -d -P --name tomcat01 tomcat
查看容器的内部网络地址 ip addr,发现容器启动的时候会得到一个 28: eth0@if29
ip地址,docker分配的!!
思考:Linux能不能ping通docker容器内部??
Linux可以ping通docker容器内部。。。
原理:
docker run -d -P --name tomcat02 tomcat
发现,这个容器生成的网卡,都是一对一对的;
veth-pair
就是一对的虚拟设备口,都是成对出现的,一段连接着协议,一段彼此相连;
正因为这个特性,veth-pair 充当一个桥梁,连接各种虚拟网络设备;
openstack、Docker容器之间的连接,OVS的连接都是使用了 veth-pair 技术;
小结:
Docker使用的是Linux的桥接技术,宿主机是一个Docker容器的网桥 Docker0
注意:Docker中所有网络接口都是虚拟的,虚拟的转发效率高!(内网传递文件)
只要容器一删除,对应的一对网桥就没有了!
--link
思考一个场景:一个微服务,database url = ip ,项目不重启,数据库ip换掉了,希望可以处理这个问题,可以通过名字来访问容器?
tomcat02 想通过直接 ping 容器名(即"tomcat01")来ping通,而不是ip,发现失败了
如何解决这个问题呢? 通过 --link
就可以解决这个网络联通问题了!!!
发现新建的tomcat03可以ping通tomcat02
docker run -d -P --name tomcat03 --link tomcat02 tomcat
docker exec -it tomcat03 ping tomcat02
反向能ping通吗? 发现tomcat02不能oing通tomcat03
探究:inspect
其实这个tomcat03就是在本地配置了到tomcat02的映射:
查看hosts 配置,在这里发现原理!
本质探究: --link
就是我们在hosts 配置中增加了一个 172.17.0.3 tomcat02 04301beb7fd7(三条信 息都是tomcat02 的) 现在玩Docker已经不建议使用 --link
了!!!
自定义网络,不使用docker0!
docker0问题:不支持容器名连接访问!
查看所有的docker网络:
网络模式 | 描述 |
---|---|
bridge | 桥接(docker默认,自己创建也使用bridge模式) |
none | 不配置网络 |
host | 和宿主机共享网络 |
container | 容器网络连通,容器直接互联(用的少,局限很大) |
之前直接启动的命令 (默认是使用 --net bridge
,可省),这个bridge就是我们的docker0,下面两句作用等价:
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
docker0(即bridge)默认不支持域名访问!--link
可以打通连接,即支持域名访问!
可以自定义一个网络:
--driver bridge 网络模式定义为:桥接
--subnet 192.168.0.0/16 定义子网,范围为:192.168.0.2~192.168.255.255
--gateway 192.168.0.1 子网网关设为:192.168.0.1
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
查看自定义网络mynet:
新建容器:
docker run -d -P --name tomcat-mynet-01 --net mynet tomcat
docker run -d -P --name tomcat-mynet-02 --net mynet tomcat
ping测试,现在不使用 --link,也可以ping 名字了 :
注:在使用自定义的网络时,docker都已经维护好了对应关系,推荐使用这样的网络!
测试打通 tomcat01 – mynet网络:
docker network connect mynet tomcat01
连通之后就是将 tomcat01 放到 mynet 网络下,这就使 tomcat01 容器产生了两个ip地址!
tomcat01 容器连通 mynet 网络成功!tomcat02 容器无法 ping 通 mynet 网络!
结论:假设要跨网络操作,就需要使用 docker network connect [OPTIONS] NETWORK CONTAINER
连通