美文网首页
docker single-host network

docker single-host network

作者: taohuuu | 来源:发表于2018-08-12 22:02 被阅读0次

    单一主机docker容器网络


    CNM(container network model)模型

    CNM模型
    • Sandbox代表容器的网络命名空间,包含了容器的完整网络栈,不同的容器之间可以完全隔离。在宿主机上,就表现为独立的网络命名空间。
    • Endpoint代表容器接入网络的端点,可以形象地认为一个Endpoint对容器来说,就是一张物理网卡。
    • Network代表一组可以直接相互通信的Endpoint集合,可以基于LinuxBridge或者VLAN实现。在宿主机上,每个网络都是一个独立的网络命名空间,宿主机上同一网络的的容器,都通过veth pair链接到这个网络命名空间上。

    Docker提供了多种网络工作模式
    通过 docker network ls 可以查看

    docker网络

    scope为local表示网络模式只能用于单个主机,不能用于集群


    The brige network

    当 docker daemon 启动后,在linux系统中,可以使用ifconfig命令查看到有一个名为docker0的网桥(在mac中,docker是启动在虚拟机中,所以不存在docker0的网桥)

    默认网络模式,此模式下,容器有自己的独立的Network Namespace。简单来说,Docker在宿主机上虚拟了一个子网络,宿主机上所有容器均在这个子网络中获取IP,这个子网通过网桥挂在宿主机网络上。Docker通过NAT技术确保容器可与宿主机外部网络交互。


    bridge

    eth:以太网卡
    veth:虚拟以太网卡

    新创建一个bridge
    $ docker network create --driver bridge sample-net
    再次查看docker network,就会多出一个实例

    查看子网范围
    $ docker network inspect sample-net |grep Subnet

    bridge subnet
    查看子网范围,发现不同bridge子网范围不一致
    指定子网范围(/16表示子网掩码)
    $ docker network create --driver bridge --subnet "10.1.0.0/16" test-net

    启动容器c1
    $ docker container run --name c1 -it -d jenkins

    查看默认bridge信息
    $ docker network inspect bridge
    发现此时包含容器c1信息

    启动容器c3
    $ docker container run --name c3 -d --network test-net jenkins
    查看test-net的bridge信息
    docker network inspect test-net
    发现此时包含容器c3信息

    连续两次声明network,以最后一个为准
    $ docker container run --name c5 -d --network sample-net --network test-net jenkins

    删除network
    docker network rm test-net
    docker network rm sample-net


    The host network

    启动容器
    $ docker container run --rm -it --network host jenkins /bin/bash
    执行ip addr
    发现看到的都是宿主机上的信息


    The null network

    启动容器
    $ docker container run --rm -it --network none jenkins /bin/sh
    执行ip addr show ehto
    发现找不到eth0网卡信息


    container:web

    创建bridge
    $ docker network create --driver bridge test-net
    创建镜像为nginx的容器web
    $ docker container run --name web -d --network test-net nginx
    创建容器alpine
    $ docker container run -it --rm --network container:web alpine /bin/sh
    上述容器共享同一namespace,可互相访问
    $ wget localhost:80


    port management

    $ docker container run --name web -P -d nginx
    -P表示所有的容器端口均暴露给主机的32XXX端口范围
    查看端口
    $ docker container port web

    以参数的形式暴露端口
    $ docker container run --name web2 -p 8079:80 -d nginx

    相关文章

      网友评论

          本文标题:docker single-host network

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