zoukankan      html  css  js  c++  java
  • 容器的网络模式

    容器网络概览

    容器之间如何联通是个重要的问题。Docker官方文档 https://docs.docker.com/network/ 介绍了多种网络模式,本文加以阐述:

    • bridge
    • host
    • container
    • none
    • overlay
    • macvlan
    • netplugin

    默认的容器网络,bridge模式

    如果你不给容器网络做任何设置,那么容器将会使用bridge网络模式。该模式下,Docker会为容器创建一个eth0端口,绑定在主机的docker0上,并且给eth0分配一个和docker0同网段的IP地址。

    docker run -d --net=bridge busybox:01 sleep 60
    进入容器查看网络,如下:
    / # ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
    193: eth0@if194: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
        link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
           valid_lft forever preferred_lft forever
    
    

    host网络

    对于独立的容器,去掉容器和Docker主机之间的网络隔离,直接使用主机的网络。这种模式适用于系统组件。

    docker run -d --net=host busybox:01 sleep 60
    

    container网络

    container 启动一个容器,会使用另外一个已经存在的容器的网络,它们会共享网络协议栈,它们的网络是一模一样的。

    docker run -d --net=container:a56f9cc34ed0 busybox:01 sleep 60
    

    这里指定网络要使用格式container:<name|id>.那么新创建出来的容器和原来的容器a56f9cc34ed0是一样的网络配置。

    none网络

    对于none网络模式的容器,禁用容器的所有网络。通常与自定义网络驱动程序一起使用。

    docker run -d --net=none busybox:01 sleep 60
    

    overlay网络

    overlay网络和macvlan是docker原生的支持跨主机通信的网络模式。Overlay网络把多个Docker daemon连接起来并用swarm services通信。可以利用overlay网络来实现一个swarm service和一个单独容器的通信,或者实现分属于两个不同Docker daemons的单独容器的通信。该方法不需要在这些容器之间设置操作系统的路由。
    其中如果要创建一个overlay网络必须要先使用 docker swarm init 将 Docker 守护进程初始化为 swarm manager,或者使用 docker swarm join 将其加入到现有的 swarm 中.然后可以用如下命令创建一个overlay网络:

    $ docker network create -d overlay my-overlay
    

    然后再创建容器使用此网络。因为不适用Swarm,所以这里暂不讨论这种网络。

    macvlan网络

    Macvlan网络允许你给容器分配一个MAC地址 使它看起来像网络上的一个物理设备。Docker守护进程通过容器的MAC地址将流量路由到容器。当希望直接连接到物理网络而不是通过 Docker 主机的网络栈进行路由时(特别是一些老的应用),使用 macvlan 网络是最佳选择。macvlan是linux操作系统内核提供的网络虚拟化方案之一,更准确的说法是网卡虚拟化方案。它可以为一张物理网卡设置多个mac地址,相当于物理网卡施展了影分身之术,由一个变多个,同时要求物理网卡打开混杂模式。针对每个mac地址,都可以设置IP地址,本来是一块物理网卡连接到交换机,现在是多块虚拟网卡连接到交换机。

    1. 分别在两个主机上创建相同的macvlan: 
       docker network create -d macvlan   --subnet=172.16.86.0/24   --gateway=172.16.86.1   -o parent=bond0   macvlan-net
    2. 然后使用该macvlan的IP分别在两台主机上创建容器,指定IP是为了防止IP冲突:
       docker run --name=host1container -d --net=my-macvlan-net --ip=172.16.86.2 busybox:01  sleep 100
       docker run --name=host2container -d --net=my-macvlan-net --ip=172.16.86.3 busybox:01  sleep 100
    3. 尝试两台容器互ping
    

    上面例子的macvlan的网络拓扑结构如下图所示:

    netplugin

    netplugin是网络插件模式, 您可以使用Docker安装和使用第三方网络插件。常用的网络插件有flannel、calico等。

  • 相关阅读:
    PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键
    支付宝支付开发——当面付条码支付和扫码支付
    C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理
    ***微信 该连接无法访问问题解决办法
    JQuery 导入导出 Excel
    用PowerDesigner对现有的数据库反向工程建立E-R图
    js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
    微信网页第三方登录原理
    C# 添加Windows服务,定时任务
    微信公众平台开发(104) 自定义菜单扫一扫、发图片、发地理位置
  • 原文地址:https://www.cnblogs.com/janeysj/p/13038715.html
Copyright © 2011-2022 走看看