美文网首页
Docker网络

Docker网络

作者: 哦呵呵_3579 | 来源:发表于2019-10-18 17:23 被阅读0次

    Docker网络

    网络模式

    bridge模式

    docker默认的网络模式 -network=bridge
    

    使用docker0网桥,docker0的默认网段是172.17.0.0,网关地址为172.17.0.1,通过bridge模式启动的容器,进入容器日内部并使用ip route show指令可以看到其使用的网关就是docker0的网关地址。

    在宿主机上通过brctl show docker0可以看到docker0桥接的网卡与启动的容器的veth一致。

    容器之间的通讯:
    从a容器ping b容器
    1、数据包从a容器对应的veth流到docker0
    2、docker0广播arp寻找b容器对应的地址
    3、b容器的veth收到广播并回复docker0自己就是目标
    4、a容器与b容器建立连接并实现通信

    容器与外网通讯
    1、veth数据流到docker0网桥
    2、docker0网桥流量流向eth0
    3、eth0流量流向对应的目标
    只要是eth0可以访问到的,容器就可以访问到

    host模式

    -network=host
    

    直接使用宿主机的网络,无法指定出入的流量以及暴露的端口,默认暴露出去的地址是0.0.0.0:xxxx,可以直接访问(TODO())。

    自定义bridge

    通过docker指令创建自定义的网桥,由于默认的bridge模式无法为container指定ip,所以需要通过自定义网桥的方式来实现,且自定义网桥可以限制容器之间的相互访问,跨网桥无法互相访问。

    docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1"  docker1
    

    使用指定网桥的时候只要通过network指定网桥名称即可,且使用自定义的网桥可以指定容器的IP。并且由于是固定IP,就可以通过iptable来做各种的规则。

    docker run --network=docker1 --ip=172.18.0.100 .....
    

    container模式

    --network=container:NAME_or_ID
    

    这个模式就是指定一个已有的容器,共享该容器的IP和端口。除了网络方面两个容器共享,其他的如文件系统,进程等还是隔离开的。

    none

    --network=none
    

    这个模式下,dokcer不为容器进行任何网络配置。需要我们自己为容器添加网卡,配置IP。

    设置容器流量出入口

    Docker是通过iptable的方式实现流量的控制的

    设置流量出口网络

    通过添加iptable规则实现

    iptables -t nat -I POSTROUTING -p all -s 172.17.0.0/16 -j SNAT --to-source 10.0.0.100
    

    该指令添加了一条nat规则,把所有来自 172.17.0.0/16 网段且即将流出本主机的数据包的源 IP 地址都修改为 10.0.0.100(建议通过添加自定义网桥的方式来做)。

    设置流量入口网络

    直接通过-p的方式暴露一个端口出去,默认使用的是0.0.0.0,所有网卡均可访问,也可以在参数中指定特定的网卡,例如:-p 192.168.1.1:80:80来指定只能通过该网卡来访问。

    查看nat表
    iptables -L -n -t nat --line-numbers
    查看路由规则
    route -n

    相关文章

      网友评论

          本文标题:Docker网络

          本文链接:https://www.haomeiwen.com/subject/fjkimctx.html