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中的所有网络接口都是虚拟的,虚拟的转发效率高
  只要容器删除,对应网桥也会自动删除
  思考一个场景,我们编写了一个微服务,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查看容器信息

发现一个容器两个ip

posted @ 2021-02-10 12:50  shamozhicheng  阅读(64)  评论(0编辑  收藏  举报