• docker 自定义网络 不使用 link 也能实现容器间网络互通


    十年河东,十年河西,莫欺少钱穷

    学无止境,精益求精

    关于docker网络基础,大家可参考:https://blog.csdn.net/weixin_45677119/article/details/108187604

    1.介绍

    常规docker容器启动,可以用–link,进行容器网络绑定,但是一旦容器多了,之后就会非常麻烦,所以要自定义一个docker网络,小白推荐使用–link命令

    自定义网络修复了docker0的容器之间无法用容器名相互ping通的问题 

    自定义网络可以有效的区分不同镜像生成的容器管理问题,例如MySQL 集群使用自定义网络1,Redis集群使用自定义网络2,等

    自定义网络同网段容器可以相互ping通【不需要使用--link指令就可以通】,是不是很牛逼

    2.命令

    自定义网络命令说明
    docker network create 创建自定义网络
    docker network inspect 查看自定义网络详情
    docker network ls 查看网络列表
    docker network connect 不同的自定义网络互相连接
    docker network rm 删除自定义网络

    3、查看网络列表

    docker network ls

    4、查看网络元数据

    docker network inspect 891c28afc2df

    5、自定义网络

    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            子网掩码  后16位可为任意值,大概支持 65535 个IP

     --gateway 192.168.0.1                网关IP 

     6、查看创建的网络 mynet 的详细信息

    docker network inspect mynet

     7、创建指定网络的容器,我的本地镜像为centos

    docker run -it --name mycentos --net mynet centos

    --net    指定某个网络

    8、容器内 ping  百度

    ping www.baidu.com

     可以ping通 网络正常

    9、退出容器【ctrl +p+q】,容器还要继续运行的,在创建一个新的容器

    docker run -it --name mycentos2 --net mynet centos

    10,在容器mycentos2中 ping mycentos 容器

    先进入容器

    docker exec -it 13df312b5feb /bin/bash

    然后ping

    ping mycentos

     由此可见,在自定义网络中,我们不使用 --link 指令,也能实现容器间网络互通。

    继续新建一个网络,不同子网掩码,不同网关,实现两个不同网络之间的互联,这时就要用到另外一个命令,docker network connect  [OPTIONS] NETWORK CONTAINER

    docker network connect  [OPTIONS] NETWORK CONTAINER

    NETWORK 是指一个网络,例如上述创建的mynet   

    CONTAINER 是指一个容器,是不在 指定NETWORK 中的一个容器名称 或 容器ID

    两个不同网络之间的容器互联技术

    继续新建一个网络:

    docker network create --subnet 192.170.1.0/16 --gateway 192.170.0.1 mynet2

    此时,我们就有了两个2个网络,一个名称为 mynet  ,一个名称为mynet2

    在mynet2 网络下新建两个容器,分别命名为:networkcentos  、 networkcentos2

     docker run -it --name networkcentos --net mynet2 centos

    docker run -it --name networkcentos2 --net mynet2 centos

    查看我们现有的四个容器

    docker ps -a

     启动mycentos 及 mycentos2

    [root@localhost ~]# docker start 2641576ed291
    2641576ed291
    [root@localhost ~]# docker start 13df312b5feb

    此时,四个容器均为启动状态,他们之间有如下关系

     那么,在Mynet 中是否可以 ping 通 myNet2 中的容器?

    进入容器,并尝试 Ping

    docker attach mycentos
    
    ping networkcentos2

     ping 不通,此时我们只需执行一条 connect 指令,即可完成网络互通

     关键指令:

    docker network connect mynet2 mycentos

    该指令的意思是指: mycentos 容器 可以和mynet2 网络中的任何一个容器互联

    测试如下,分别进入mynet2 容器, ping centos 容器:

    [root@localhost ~]# docker attach networkcentos
    [root@75c9fb8107ed /]# ping mycentos
    PING mycentos (192.170.0.4) 56(84) bytes of data.
    64 bytes from mycentos.mynet2 (192.170.0.4): icmp_seq=1 ttl=64 time=0.363 ms
    64 bytes from mycentos.mynet2 (192.170.0.4): icmp_seq=2 ttl=64 time=0.273 ms
    64 bytes from mycentos.mynet2 (192.170.0.4): icmp_seq=3 ttl=64 time=0.589 ms
    64 bytes from mycentos.mynet2 (192.170.0.4): icmp_seq=4 ttl=64 time=0.418 ms
    read escape sequence
    [root@localhost ~]# docker attach networkcentos2
    [root@6a179f79f064 /]# ping mycentos
    PING mycentos (192.170.0.4) 56(84) bytes of data.
    64 bytes from mycentos.mynet2 (192.170.0.4): icmp_seq=1 ttl=64 time=0.174 ms
    64 bytes from mycentos.mynet2 (192.170.0.4): icmp_seq=2 ttl=64 time=0.336 ms
    64 bytes from mycentos.mynet2 (192.170.0.4): icmp_seq=3 ttl=64 time=0.337 ms

    测试结果,可以 ping 通

    如果在 mynet2 容器中,ping mycentos2 是否能ping通呢?

    [root@6a179f79f064 /]# ping mycentos2
    ping: mycentos2: Name or service not known

    测试结果 ping 不通

    如果想让 mycentos2 容器访问 mynet2网络,只需执行:

    docker network connect mynet2 mycentos2   --mycentos2 可以访问 mynet2 中的任何容器

    这就是docker网络的自定义

    @天才卧龙的拨客人

     @天才卧龙的波尔克

  • 相关阅读:
    解决面试题的思路--5
    剑指offer例题分享--4
    剑指offer--3
    剑指offer--2
    【数据结构】5.2 二叉搜索树的创建查找以及插入操作
    【数据结构】5.1 顺序表的查找以及二分查找的实现
    【数据结构】4.1图的创建及DFS深度遍历(不完善)
    【密码学】RSA加密 kotlin实现方法(支持任意字节长度)
    【数据结构】3-2哈夫曼树的实现(数组实现)以及哈夫曼编码
    【密码学】公钥密码体制概述
  • 原文地址:https://www.cnblogs.com/chenwolong/p/dockernetwork.html
Copyright © 2020-2023  润新知