• Docker网络


    理解Docker0

    三个网络

    ip addr

    • lo 本地回环地址
    • etho 内网地址
    • docker0 docker地址
    问题:docker 是如何处理容器网络访问的
    docker run -d -P --name tomcat01 tomcat
    # 查看容器的内部网络地址 ,发现容器运行的时候会得到一个 **eth0@if262** ip地址,docker分配的
    docker exec -it tomcat01 ip addr
    # Linux 可以 ping 通 docker 容器内部
    ping ip地址

    原理docker0

    1. 我们每启动一个docker容器,docker就会给docker容器分配一个ip,只要安装了docker,就会有一个网卡docker0
    • 桥接模式,使用的技术是evth-pair技术。
    • 再次测试ip addr
    1. 再启动一个容器,发现又多了一对网卡
    # 我们发现这个容器带来网卡,都是一对一对的
    # evth-pair 就是一对的虚拟设备,他们都是成对出的,一端连着协议,一段彼此相连
    # 正因为这个特性, evth-pair 充当一个桥梁,连接着各种虚拟网络设备的
    1. 容器和容器之间是可以互相ping通的
    • docker01 ping docker02

      结论:tomcat01 和 tomcat02 是公用的一个路由器,docker0
      所有的容器不指定网络的情况下,都是 docker0 路由的,docker会给我们的容器分配一个默认的可用IP
    • docker使用的是Linux的桥接,宿主机中是一个Docker容器的网桥docker0
    • Docker中的所有的网络接口都是虚拟的,虚拟的转发效率高
    • 只要删除容器,对应的网桥一对就没了

    --link

    # error
    docker exec -it tomcat02 ping tomcat01
    # 解决,通过 --link 即可以解决了网络联通问题
    docker run -d -P --name tomcat03 --link tomcat02 tomcat
    # success
    docker exec -it tomcat03 ping tomcat02
    # 但是反向不可以ping
    docker exec -it tomcat02 ping tomcat03
    • 本质探究
      --link就是在hosts配置中增加了一个172.18.0.3 tomcat02 312857784cd4
      建议使用自定义网络

    自定义网络

    查看所有的docker网络

    docker network ls

    网络模式

    • bridge: 桥接(docker)
    • none:不配置网络
      host:和宿主机共享网络

    测试

    # 我们直接启动多个命令 --net bridge ,而这个就是我们的docker0
    docker run -d -P --name tomcat01 tomcat
    docker run -d -P --name tomcat01 --net bridge tomcat
    # docker特点。默认,域名不能访问,--link可以打通连接
    # 自定义网络
    --driver bridge
    --subnet 192.168.0.0/16 192.168.0.2 192.168.255.255
    --gateway 192.168.0.1
    docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
    # 查看
    docker network ls
    docker network inspect mynet


    # 在自己的网络中启动 tomcat-net-01 , tomcat-net-02
    docker run -d -P --name tomcat-net-01 --net mynet tomcat
    docker run -d -P --name tomcat-net-02 --net mynet tomcat
    # 可以互相ping
    • 自定义wangluodocker都已经帮我们维护好了对应的关系,推荐使用
    • 好处:
    1. redis-不同的集群使用不同的网络,保证集群是安全和健康的
    2. mysql-不同的集群使用不同的网络,保证集群是安全和健康的

    网络连通

    # 测试打通 tomcat01 - mynet
    docker network connect mynet tomcat01
    network inspect mynet
    # 联通之后就是将t omcat01 放到了 mynet 网络下
    # 一个容器两个ip地址
    # 例如:阿里云服务-公网ip,斯旺4ip
    # succes
    docker exec -it tomcat01 ping tomcat-net-01
    # serror
    docker exec -it tomcat01 ping tomcat-net-02
    • 结论
      假设要跨网络操作别人,就需要使用 docker network connect 联通。

    实战:部署Redis集群

    # 创建网卡
    docker network create redis --subnet 172.38.0.0/16
    # 查看
    docker network ls
    docker network inspect redis
    • 创建集群

    # 查看
    docker exec -it redis-1 /bin/sh
    ls
    redis-cli --cluster create 172.28.0.11:6379 172.28.0.12:6379 172.28.0.13:6379 172.28.0.14:6379 172.28.0.15:6379 172.28.0.16:6379 --cluster-replicas 1
  • 相关阅读:
    Python中的上下文管理:深入探索contextlib模块
    Qt中使用图像格式对QPainter绘制文字影响
    【web前端】定位
    kafka入门(一):kafka消息发送与消费
    Profibus-DP转光纤
    6.拷贝移动及文件内容命令
    element ui 中 el-button重新渲染后disabled属性失效
    六大行数据治理现状盘点:治理架构、数据标准与数据中台(2022.04)
    Android——FloatingActionButton使用说明以及避坑
    用c++补全二维数组问题代码
  • 原文地址:https://www.cnblogs.com/changebaobao/p/16247398.html