docker网络
docker网络
理解docker0
容器运行时若没有指定网络,则由docker0给容器分配ip地址
主机可以ping通容器
原理
1.我们每启动一个docker容器,docker就会给我们的容器分配一个ip地址,我们只要安装了docker,就会有一个网卡docker0桥接模式,使用的技术是evth-pair技术
2.在每开启运行一个容器,就会增加一对儿对应的网卡
evth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连,正因为有这个特性,evth-pair充当一个桥梁,专门连接各种虚拟网络设备
3.容器和容器之间是可以互相ping通的
tomcat01和tomcat02是公用的一个路由器即docker0。 所有的容器在不指定网络的情况下,都是docker0路由的,docker0会给我们的 容器分配一个默认的可用ip
小结
Docker使用的是Linux的桥接,宿主机zhong是一个Docker容器的网桥docker0
docker中的所有网络接口都是虚拟的,虚拟的转发效率高
只要容器删除,对应网桥也会自动删除
--link
思考一个场景,我们编写了一个微服务,database url=ip 项目不重启,数据库ip掉了,我们希望可以处理这个问题,可不可以用名字来访问?
#其实是这个tomcat03在本地配置了tomcat02,但是tomcat02没有配置tomcat03
–link:就是在host配置中增加了一个tomcat02的映射
我们现在玩Docker已经不建议使用–link了
我们玩的是自定义网络,因为docker0不支持容器名连接访问
自定义网路
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
docker network ls
root@qsrobot:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
5f631a837d3c bridge bridge local
eea50a6cf976 host host local
af018e231f6c mynet bridge local
f033a8a6ae9b none null local
用自己定义的网络 搭建
docker run -d -P --name tomcat-net01 --net mynet tomcat
docker run -d -P --name tomcat-net02 --net mynet tomcat
发现mynet多了两个容器
现在不使用--link,两个tomcat容器也可以相互ping通,修复了docker0的一些缺陷
自定义网络的好处
不同的集群使用不同的网络,保证集群的网络是安全健康的
网络连通
查找网络连通命令
现在有两组容器,蓝色的是docker0网络,红色的mynet网络 两个网络网段不同无法ping通
通过docker network connect mynet tomcat_docker01 将容器和网络打通
实际上就是将tomcat_docker01容器放到了mynet网络中,也就是一个容器两个IP,类似阿里云的公网IP 和 私网IP
docker inspect tomcat_docker01查看容器信息