(docker笔记):Docker 网络、自定义网络

目录

Docker 网络

三个网络

原理

docker network命令(ls、inspect)

自定义网络

自定义网络命令:docker network create

如何打通不同网段,实现连接

案例实践:docker network connect


Docker 网络

  • 清空环境
docker rmi -f $(docker images -aq)
docker rm -f $(docker ps -aq)

理解Docker0

扫描二维码关注公众号,回复: 11670271 查看本文章
  • Docker 网络的核心就是 【Docker0】

  • 我们可以用 ip addr查看一下宿主机的 ip 信息

三个网络

  • 问题:docker是如何处理容器网络访问的?

  • 先运行一个 tomcat 镜像,再查看一下网
 docker run -d -P --name tomcat01 tomcat
  • 查看docker容器网卡
docker exec -it tomcat01 ip addr

  • eth0@if81是 docker 分配的
  • linux能ping通docker容器内部

原理

  • 我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡 docker0桥接模式,使用的技术是evth-pair技术

再次测试ip addr,这是在启动了一个容器后测试,多了262

再启动一个容器进行测试,发现又多了一对网卡

  • 查看新启动的容器网卡

  • 我们发现这个容器带来网卡,都是一对对的
  • evth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连
  • 正因为有这个特性,evth-pair 充当一个桥梁,连接各种虚拟网络设备的
  • OpenStac,Docker容器之间的连接,OVS的连接,都是使用evth-pair 技术
  • 我们来测试下tomcat01和tomcat 02是否可以ping通?
    • 容器和容器之间是可以ping通的
  • 原理图

  • 结论:tomcat01和tomcat02是公用的一个路由器,docker0。
  • 所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用IP

  • Docker使用的是Linux的桥接,宿主机中是一个Dokcer容器的网桥docker0。
     
  • Docker中的所有的网络接口都是虚拟的。虚拟的转发效率高。(比如内网传递文件)
  • 只要容器删除,对应网桥一对就没了。
  • 思考一个场景,我们编写了一个微服务,database url=ip:,项目不重启,数据库ip换掉了,我们希望可以处理这个问题,可以名字来进行访问容器?
  • 运行两个容器

  • 直接通过容器名称ping不通

  • 对两个容器使用--link,可以 ping 通,反向无法 ping 通

docker network命令(ls、inspect)

docker network -ls

docker network inspect 容器id

  • docker启动时分配的id

  • 其实这个tomcat03就是在本地配置了tomcat02的配置?

  • 本质探究:
    • 如上图,--link就是我们在hosts配置中增加了-个172.18.0.3 tomcat02 312857784cd4
  • tomcat02 容器ping不通Tomcat03容器,其配置文件中没有Tomcat03记录

  • 我们现在玩Docker已经不建议使用-link了。
  • 自定义网络,不适用docker0。
  • docker0问题:他不支持容器名连接访问。

自定义网络

  • 查看所有的docker网络:docker network ls

  • 网络模式

    • bridge:桥接docker(默认,自己床架也使用bridge模式)
    • none:不配置网络
    • host:和宿主机共享网络
    • container:容器网络连通(用的少,局限很大)
  • 测试
    • 我们直接启动的命令 --net bridge,而这个就是我们的docker0
docker run -d -P --name tomcat01 tomcat 

docker run -d -P --name tomcat01 --net bridge tomcat

自定义网络命令:docker network create

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 
  • --driver bridge 表示使用桥接模式
  • --subnet 192.168.0.0/16 表示子网ip 可以分配 192.168.0.2 到 192.168.255.255
  • --gateway 192.168.0.1 表示网关
  • mynet 表示网络名

  • 查看自己定义的网络

  • 使用自己定义的网络启动容器

  • 再次使用 docker network inspect mynet 查看网络信息

  • 使用自定义网络 ping 容器的 ip 地址和名称都能 ping 通
  • 我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络
  • 好处:
    • redis-不同的集群使用不同的网络,保证集群是安全和健康的
    • mysql-不同的集群使用不同的网络,保证集群是安全和健康的

如何打通不同网段,实现连接

案例实践:docker network connect

  • 查看mynet网络信息:docker inspect mynet
  • 发现直接将tomcat01加过来了

  • 这就是一个容器。两个ip地址
  • 阿里云服务,两个ip,一个公网,一个私网

  • 结论:假设要跨网络操作别人,就需要使用docker network connect连通

猜你喜欢

转载自blog.csdn.net/baidu_41388533/article/details/108570412