zoukankan      html  css  js  c++  java
  • Docker之单机网络三

    基本命令

    img

    --net网络模式验证

    img

    bridge模式已在在网络初探的小节已经验证过了,这里就不再进行验证,接下来我们主要验证的是剩下的三总模式;

    none

    1. 后台方式启动一个版本为最新的centos名字为centosworktest03网络模式为none的容器;

      docker run -d -it --name centosworktest03 --net none centos:latest
      
    2. 交互模式进入容器内部;

      docker ps
      docker exec -it 9a97610ae54a /bin/bash
      
    3. 验证网络模型,当你使用yum install net-tools 安装命令的时候他会提示下载失败;img

    4. 我们使用自带的ip addr来查看网路,我们会发现只有一个网络回环地址,使用none模式整个容器的网络是与其他网络隔离的;

    host

    1. 后台方式启动一个版本为最新的centos名字为centosworktest04网络模式为host的容器;

      docker run -d -it --name centosworktest04 --net host centos:latest
      
    2. 交互模式进入容器内部;

      docker ps
      docker exec -it 2958410a53c5 /bin/bash
      
    3. ip addr查看网络模式,会发现与宿主机的网络模型是一致的;

    container

    1. 后台方式启动一个版本为最新的centos名字为centosworktest05网络模式为container的容器采用centosworktest的网络模式;

      docker run -d -it --name centosworktest05 --net container:centosworktest centos:latest
      
    2. 交互模式进入容器内部;

      docker exec -it 0a8ea7a39e1a /bin/bash
      
    3. ip addr查看网络模式,会发现与容器centosworktest的网络模式是一致的;

    --link

    容器在启动的IP地址是动态分配的,如何做到本地服务的发现?也就是说容器的IP变了,如何还能够调用到对应的服务,link可以通过名称调用来解决这个问题,但是不推荐使用link来解决该问题,这里的介绍只是来了解一下这个知识点的优缺点。

    使用

    简单介绍一下我们的案例,这里我们使用的容器名称为centosworktest03的容器,该容器的网络膜模型为none,只能在网络内部通信,我们使用--link启动一个centoslinktest的容器,来测试link的作用。这里我们因为centosworktest03容器一直在启动着,我们就直接启动centoslinktest做实验了。

    1. 后台方式启动一个版本为最新的centos名字为centoslinktest容器链接到centosworktest03这个容器;

      docker run -d -it --name centoslinktest --link centosworktest02:centosworktest02 centos:latest
      
    2. 检查容器centoslinktest与容器centosworktest02网络是否通畅;

      docker exec -it centoslinktest ping centosworktest02
      
    3. 检查容器centosworktest02与容器centoslinktest的网络是否通畅;

      docker exec -it centosworktest02 ping centoslinktest
      
    4. 查看centoslinktest的hosts文件,会发现在配置文件中存在了centosworktest02配置;

    缺点
    1. link的网络是单向的,也不具备传递的特性;
    2. link的配置是静态的,当容器的IP发生改变的话,配置的链接就失效了;

    自定义网络

    1. 创建一个networktest的网络,使用--subnet指定容器分配网段,使用--gateway指定网关;

      docker network create --driver bridge --subnet  192.168.1.0/24 --gateway 192.168.1.1 networktest
      
    2. 查看网络列表;

      docker network ls
      
    3. 查看具体配置docker network inspect networktest;

    实战
    1. 后台方式分别启动名字叫customernetwork1和customernetwork2,网络模式为networktest的容器;

      docker run -d -it --name customernetwork1 --net networktest  centos:latest
      docker run -d -it --name customernetwork2 --net networktest  centos:latest
      
    2. 测试customernetwork1和customernetwork2网络的连通性,发现网络之间是联通的;

    3. 测试customernetwork1与docker0网络中容器的连通性,发现两个网络是不通的,因为属于不同的网段;

      docker exec -it e34051b19cfe ping 172.17.0.2
      
    优点

    自定义bridge网络与默认bridge网络docker0的优点如下:

    1. 自定义bridge具有更好的隔离性和容器间的互操作性,连接到同一个自定义bridge网络的容器会自动将所有端口相互暴露,并且无法连接到容器外的网络,使得容器化的应用能轻松地相互通信,并且与外部环境产生了良好的隔离性。

    2. 自定义bridge提供容器间通过名称自动发现的机制,也就是DNS解析,默认bridge网络上的容器只能通过IP地址互相访问,除非使用link命令,在用户定义桥接网络上,容器可以通过容器名称或别名来解析。

    3. 自定义bridge网络使用docker network create创建和配置。如果不同的应用程序组具有不同的网络要求,则可以在创建时分别配置每个用户定义的 bridge网络,增加了灵活性和可控性。

    不同网段的容器如何通信

    img

    1. 将容器centosworktest加入到自定义网络networktest中;

      docker network connect networktest centosworktest
      
    2. 测试centosworktest与customernetwork1的连通性,发现两个网络就是通畅的了;

  • 相关阅读:
    django 关于render的返回数据
    关于 eval 的报错 Uncaught ReferenceError: False is not defined
    Unexpected token o in JSON at position 1 at JSON.parse (<anonymous>) SyntaxError: Unexpected token R in JSON at position 0 at JSON.parse (<anonymous>)
    ajax 异步请求返回只刷新一次页面
    线程
    IO
    IO初步,字节输入流和字节输出流
    File、FileFilter、递归初步
    Map、可变参数、静态导入、Collections、Arrays、集合嵌套
    Collection单列集合中的常用实现类
  • 原文地址:https://www.cnblogs.com/johnvwan/p/15672554.html
Copyright © 2011-2022 走看看