zoukankan      html  css  js  c++  java
  • Docker实践(2)—虚拟网络

    1 docker(container)的虚拟网络

    docker的虚拟网络结构:

    NewImage 

    host创建一个虚拟bridge,每个container对应一个虚拟网络设备(TAP设备),与bridge一起构成一个虚拟网络,并通过虚拟bridge相互通信。

    Host的物理网络设备eth0作为内部虚拟网络的NAT网关,container通过eth0访问外部网络。

    # ifconfig

    docker0   Link encap:Ethernet  HWaddr 56:84:7A:FE:97:99 

              inet addr:127.0.0.2  Bcast:0.0.0.0  Mask:255.0.0.0

    eth0      Link encap:Ethernet  HWaddr 00:50:56:28:39:2C 

              inet addr:172.16.213.129  Bcast:172.16.213.255  Mask:255.255.255.0

    veth4d69  Link encap:Ethernet  HWaddr A2:7D:7B:61:CA:2F 

              inet6 addr: fe80::a07d:7bff:fe61:ca2f/64 Scope:Link

              UP BROADCAST RUNNING  MTU:1500  Metric:1

    # brctl show

    bridge name     bridge id               STP enabled     interfaces

    docker0         8000.56847afe9799       no              veth4d69

    (1)host内部container内部互访

    通过虚拟网桥完成,比较简单。

    (2)container通过NAT访问外部网络

    -t nat -A POSTROUTING -s 127.0.0.0/8 ! -d 127.0.0.0/8 -j MASQUERADE

    上面127.0.0.0/8是内部container的网络,如果目标地址非内部虚拟网络,则进行NAT转换。

    (3)外部网络访问container

    通常来说,与虚拟机一样,我们的容器是用来服务的,这就需要让外部网络能够访问container,这通过DNAT来实现。

    -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 49153 -j DNAT --to-destination 127.0.0.3:22

    127.0.0.3:22是内部container的ip和sshd端口,在host上映身为49153端口。

    # docker port test_sshd 22

    0.0.0.0:49153

    2与虚拟机的比较

    实际上,docker的网络结构就是VMWare/KVM的NAT模式。在实际运营中,虚拟机一般会与host在同一个网络,所以采用下面这种桥接模型,而对于docker,由于container内网是不暴露给外部的,所以采用NAT方式。

    KVM Bridge示意图:

     NewImage

    # brctl show

    bridge name     bridge id               STP enabled     interfaces

    br0             8000.0019d1891e2f       no              eth0

                                                                            vnet0


    作者:YY哥 
    出处:http://www.cnblogs.com/hustcat/ 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    chmod: changing permissions of ‘/etc/fstab': Read-only file system
    让Mac终端保持(SSH)与远程的连接状态
    修改数据库密码
    SSH密钥登录让Linux VPS/服务器更安全
    redis 使用redis Desktop manger进行远程进行链接
    mysql 性能
    对阿里云服务器(数据盘已分区并格式化)的数据盘进行扩容
    备份数据库的shell
    window上可以执行的shell脚本,复制到linux上执行报错了
    自然语言处理中的N-Gram模型
  • 原文地址:https://www.cnblogs.com/hustcat/p/3885857.html
Copyright © 2011-2022 走看看