zoukankan      html  css  js  c++  java
  • Docker---初识Docker网络

    docker0网络详解

    我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0。

    一、启动两个tomcat容器

    [root@localhost ~]# docker run -d -P --name tomcat01 tomcat              # 启动镜像,生成tomcat01容器之后,使用ip addr命令发现多了一对网卡。
    [root@localhost ~]# docker run -d -p 3120:8080 --name tomcat02 tomcat    # 启动镜像,生成tomcat02容器之后,使用ip addr命令发现多了一对网卡。
    [root@localhost ~]# ip addr                                              # 执行上面两步之后,查看服务器ip地址,发现多了两对网卡。

    二、查看两个tomcat容器的ip地址

    [root@localhost ~]# docker exec -it tomcat01 ip addr                     # 启动容器时,查看容器的内部网络地址:ip addr,这里显示:172.17.0.2。
    [root@localhost ~]# docker exec -it tomcat02 ip addr                     # 启动容器时,查看容器的内部网络地址:ip addr,这里显示:172.17.0.3。

    三、测试宿主机和容器、容器和容器之间的网络是否可以通

    [root@localhost ~]# ping 172.17.0.2                                      # 在服务器上ping tomcat01容器,即linux服务器上可以ping通docker容器内部。
    [root@localhost ~]# ping 172.17.0.3                                      # 在服务器上ping tomcat02容器,即linux服务器上可以ping通docker容器内部。
    [root@localhost ~]# docker exec -it tomcat01 ping 172.17.0.3             # 在tomcat01容器中 ping tomcat02容器,可以ping通,即容器之间可以互相ping通。

    四、删除容器,发现第一步生成的网卡信息也同时没有了

    [root@localhost ~]# docker stop tomcat01      # 停止tomcat01容器
    [root@localhost ~]# docker rm tomcat01        # 删除tomcat01容器
    [root@localhost ~]# ip addr                   # 查看网卡信息

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

    总结2:Docker中的所有的网络接口都是虚拟的,因为虚拟的转发效率高(如内网传递文件)。只要容器删除,对应的网桥一对也没有了。

    总结3:docker网络使用桥接模式,使用的技术是veth-pair技术。就是一对虚拟设备接口,他们都是成对出现的。veth-pair充当一个桥梁,连接各种虚拟网络设备的。

    总结4:docker0特点:是默认的网络模式,不能通过容器名访问。解决方法:一、--link可以打通连接,二、自定义网络可以打通连接。

    容器互联之--link

    测试tomcat01容器直接ping tomcat02容器,发现无法ping通,使用--link可以解决这一问题。

    [root@localhost ~]# docker exec -it tomcat01 ping tomcat02                      # 无法ping通
    [root@localhost ~]# docker run -d -P --name  tomcat03 --link tomcat02 tomcat    # 启动镜像,生成tomcat03容器
    [root@localhost ~]# docker exec -it tomcat03 ping tomcat02                      # 可以ping通,因为--link就是在tomcat03容器中的hosts文件中添加了172.17.0.3	tomcat02 b41c08fb9421配置。现在不建议使用了。
    [root@localhost ~]# docker exec -it tomcat02 ping tomcat03                      # 无法ping通,即单向的,是因为在tomcat02容器中的hosts文件没有修改配置。
    
    [root@localhost ~]# docker exec -it tomcat03 cat /etc/hosts                     # 查看tomcat03容器的hosts文件

    容器互联之自定义网络

    一、查看所有的docker网络

    [root@localhost ~]# docker network --help  # 查看帮助文档
    [root@localhost ~]# docker network ls

    二、网络模式

    • bridge      桥接模式(默认的,自己创建的也使用bridge模式),就是在docker上面搭桥。
    • none        不配置网络
    • host        主机模式,就是和宿主机共享网络
    • container   容器内网络连通(用的少)

    三、自定义一个网络

    [root@localhost ~]# 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   子网地址(范围:192.168.0.2-192.168.255.255)
    --gateway 192.168.0.1     网关

    四、查看自定义网络的信息

    [root@localhost ~]# docker network inspect mynet

    五、测试容器之间网络连通

    [root@localhost ~]# docker run -d -P --name tomcat05 --net mynet tomcat      # 使用自定义网络创建tomcat05容器
    [root@localhost ~]# docker run -d -P --name tomcat06 --net mynet tomcat      # 使用自定义网络创建tomcat06容器
    [root@localhost ~]# docker exec -it tomcat05 ip addr                         # 查看tomcat05容器的ip地址为:192.168.0.2
    [root@localhost ~]# docker exec -it tomcat06 ip addr                         # 查看tomcat06容器的ip地址为:192.168.0.3
    
    [root@localhost ~]# docker exec -it tomcat05 ping tomcat06                   # 可以ping通,不使用--link也可以通过容器名称ping通容器了
    [root@localhost ~]# docker exec -it tomcat05 ping 192.168.0.3                # 可以ping通

    网络连通:不在同一个网段上的两个容器

    一、使用docker0(即bridge)创建一个容器

    [root@localhost ~]# docker run -d -P --name tomcat01 tomcat                # 直接启动的命令,默认就带参数--net bridge,而这个就是我们的docker0。
    [root@localhost ~]# docker run -d -P --name tomcat02 --net bridge tomcat   # 等同上面的命令,创建tomcat02容器

    二、使用mynet 创建一个容器

    [root@localhost ~]# docker run -d -P --name tomcat05 --net mynet tomcat 

    三、测试两个容器直接的网络连接情况

    [root@localhost ~]# docker exec -it tomcat01 ping tomcat05

    四、打通不在同一个网段的两个容器的网络连接

    [root@localhost ~]# docker network connect mynet tomcat01      # tomcat01容器与mynet这个网段连通
    [root@localhost ~]# docker network inspect mynet               # 查看自定义网络mynet的信息

    五、再次测试网络连接情况

    [root@localhost ~]# docker exec -it tomcat01 ping tomcat05    # 可以ping通
    [root@localhost ~]# docker exec -it tomcat02 ping tomcat05    # 不可以ping通,因为tomcat02与mynet这个网络没有连通

  • 相关阅读:
    人工智能背后的故事
    idea 开发插件。
    安卓工作室 Android studio 或 Intellij IDEA 美化 修改 汉化 酷炫 装逼 Android studio or Intellij IDEA beautify modify Chinesization cool decoration
    安卓工作室 android studio文件和代码模板,以及汉化出错问题
    安卓工作室 android studio 汉化后,报错。 设置界面打不开。Can't find resource for bundle java.util.PropertyResourceBundle, key emmet.bem.class.name.element.separator.label
    android studio的汉化 教程 及解析
    安卓工作室Android Studio 快捷键
    安卓工作室 android studio 的 汉化 美化 定制 Android studio's Chinesization beautification customization
    VR开发 VR development
    Lakeshore 中文开发界面,示例项目,飞机大战 等 Lakeshore Chinese development interface, sample project, aircraft war, etc
  • 原文地址:https://www.cnblogs.com/liuhaidon/p/13630695.html
Copyright © 2011-2022 走看看