1、Libnetwork

  Libnetwork提出了新的容器网络模型简称为CNM,定义了标准的API用于为容器配置网络。

  CNM三个重要概念:

    沙盒:一个隔离的网络运行环境,保存了容器网络栈的配置,包括了对网络接口、路由表、DNS的配置。

    Endpoint:Endpoint将沙盒加入到一个网络中,一个Endpoint只能属于一个沙盒。

    网络:网络包括一组能互相通信的Endpoint。

  CNM的五种驱动:

    bridge:Docker默认的网络驱动,Container通过一对veth pair链接到Dokcer网桥上,由Docker为容器动态分配IP及路由规则等。

    host:容器与主机共享同一Network Namespace。

    null:容器内网络配置为空,需要用户手动配置网络。

    remote:Docker网络插件的实现,使CNM通过HTTP RESTful API对接第三方的网络方案。

    overlay:Docker原生跨主机多子网网络方案,需要内核>=3.16才可正常使用。

2、基本网络配置

  none:不为容器配置任何网络参数

    启动容器:docker run --net=none -ti ubuntu:latest ip addr show

    可以看到容器仅有一个lo环回接口,可以为手动容器配置网络。

  container:与另一个容器共享Network Namespace

    首先启动一个名为dockerNet的容器,dns为8.8.4.4

      docker run -h dockerNet --dns 8.8.4.4 -tid ubuntu:latest bash

      进入到容器并查看网络配置

      docker exec -ti dockerNetID bash

    再次启动共享网络的docker容器

      docker run --net=container:dockerNetID -ti ubuntu:latest bash

    再次查看网络配置,其IP地址、DNS、hostname都继承了dockerNet

  host:与主机共享Root Network Namespace,容器可以完全操纵主机的协议栈、路由表,所以一般避免使用host模式

    docker run --net=host -ti ubuntu:latest bash

    查看网络配置与主机一样

  bridge:Docker设计的NAT网络模型

    docke run -ti --net=bridge ubuntu:latest ip addr show

    该容器会从172.17.42.1/16子网内分配IP

  overlay:Docker原生的跨主机多子网模型

    overlay网络比较复杂,底层需要类似consul或etcd的KV存储系统进行消息同步,核心是通过Linux网桥与vxlan隧道实现跨主机划分子网。

    overlay网络创建步骤:

      获取实验版Docker:

        curl -sSL https://experimental.docker.com/ | sh

      主机1以bootstrap模式运行consul server

        consul agent -server -bootstrap -data-dir /tmp/consul -bind Host-1-IP

      主机2启动consul client

        consul agent -data-dir /tmp/consul -bind HOST-2-IP

        consul join HOST-1-IP

      主机1启动Docker daemon

        docker daemon --kv-store=consul:localhost:8500 --label=com.docker.network.driver.overlay.bind_interface=eth0

      主机2启动daemon

        docker daemon --kv-store=consul:localhost:8500 --label=com.docker.network.driver.overlay.bind_interface=eth0 \

        --label=com.docker.network.driver.overlay.neighbor_ip=Host-1-IP

      在主机1上创建overlay网络

        docker network create -d overlay dev

      查看创建的网络:docker network ls

      在主机1上运行一个容器

        docker run -tid --publish-service test.dev ubuntu:latest bash

        test.dev:为容器在dev网络上绑定一个test的服务

      在主机2上运行一个容器

        docker run -tid --publish-service test1.dev.overlay ubuntu:latest bash

        test1.dev.overlay:绑定名为test1的服务,test1服务所在的网络是dev,网络类型是overlay

      此时主机1和主机2上的容器是可以通信的

    overlay网络详情查看

      沙盒保存在/var/run/docker/netns

      创建软连接:ln -s  /var/run/docker/netns/OverLayNetID /var/run/netns/OverLayNetID

      创建软连接是为了能够使用IP命令操纵名字空间

      查看端口详细信息:

        ip netns exec OverLayNetID ip addr show

      查看网桥信息:  

        ip netns exec OverLayNetID brctl show  

      查看vxlan信息:

        ip netns exec OverLayNetID ip -d link show vxlan1 (vxlan1为网桥信息显示的interfaces)

        # vxlan id表示为占用的vxlan隧道,一般为256~1000

3、Docker相关网络参数

  Daemon相关:

    查看帮助:docker daemon --help

    -b,--bridge=  #指定docker使用的网桥,默认为docker0

    --bip=      #指定docker0网桥的IP,不能与-b一起使用

    --default-gateway=  #设置容器的默认网关

    --default-gateway-ipv6 #设置容器的ipv6网关

    --dns=[]    #设置容器的dns

    --dns-search=[]  #设置容器的search domain

    --fixed-cidr=  #定义容器的网段

    --fixed-cidr-ipv6=

    -H,--host=[]  #指定docker client和docker daemon通信的socket地址,可以是tcp地址、unix socket地址或socket文件描述符,可同时指定多个

           #如:docker daemon -H tcp://10.10.10.10:60000 -H unix:///var/run/docker.sock

           #代表docker同时监听60000端口和docker.sock文件

    --icc=true    #允许/禁止容器间通信

    --ip=0.0.0.0   #容器暴露端口时绑定的主机IP,默认为0.0.0.0

    --ip-forward=true  #开启转发功能

    --userland-proxy=true  #生产环境建议设置为false

  Client相关:

    查看帮助:docker run --help

    --add-host=[]    #在容器内的hosts文件添加一行解析

    --dns=[]

    --dns-search=[]

    --expose=[]    #暴露容器的端口,而不映射到主机端口

    -h,--hostname=  #设置容器的主机名

    --link=[]       #链接到另一个容器,在容器中可以通过ID或主机名访问到其他容器

    --max-address=

    -net=bridge    #设置容器的网络运行模式,模式为上述介绍

    -P,--publish-all=false  #将容器所有暴露出的端口映射到主机随机端口

    -p,--publish=[]   #将容器一段范围内的端口映射到主机指定的端口

  Docker Daemon实例:

    docker daemon -H tcp://10.10.10.10:50000 -H unix:///var/run/docker.sock --fixed-cidr=172.17.55.0/24 --icc=false --userland-proxy=false

    # --fixed-cidr指定容器将从172.17.55.0网段分配IP,--icc 禁止容器间通信,

  Dokcer Client示例1:

    docker run -tid --net=bridge -p 10000:22/tcp -h docker ubuntu:latest bash

    # 启动一个主机名为docker 网络模式为bridge的容器,将10000映射到22端口,此容器会获取一个55.0网段的IP

  Docker Client示例2:

    docker run -tid --name=c1 ubuntu:latest bash

    docker run -tid --link=c1:alias_c1 --name=c2 ubuntu:latest bash

    # 首先启动了一个名为c1的容器,然后启动了一个连接到c1的名叫c2的容器,c1别名起为alias_c1,此时容器c2可通过c1别名与c1通信

Docker(四):Docker基本网络配置的更多相关文章

  1. Docker 使用指南 (三)—— 网络配置

    版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/95 来源:腾云阁 https://www.qclou ...

  2. Docker Network Configuration 高级网络配置

    Network Configuration TL;DR When Docker starts, it creates a virtual interface named docker0 on the ...

  3. DOCKER学习_005:Flannel网络配置

    一 简介 Flannel是一种基于overlay网络的跨主机容器网络解决方案,也就是将TCP数据包封装在另一种网络包里面进行路由转发和通信, Flannel是CoreOS开发,专门用于docker多机 ...

  4. (转) docker跨主机 macvlan 网络配置

    原文链接 https://github.com/alfredhuang211/study-docker-doc/blob/master/docker%E8%B7%A8%E4%B8%BB%E6%9C%B ...

  5. Docker——四种网络模式

    docker run创建Docker容器时,可以用–net选项指定容器的网络模式,Docker有以下4种网络模式:  bridge模式:使用–net =bridge指定,默认设置:  host模式 ...

  6. Docker学习第四天(Docker四种网络模式)

    Docker四种网络模式 实现原理 Docker使用Linux桥接(参考<Linux虚拟网络技术>),在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根 ...

  7. 5、Docker网络配置(单机)

    一.概述 以下内容参考:https://docs.docker.com/network/#network-drivers Docker容器和服务如此强大的原因之一是您可以将它们连接在一起,或者将它们连 ...

  8. Docker 四种网络模式

    原文 https://www.cnblogs.com/gispathfinder/p/5871043.html 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络 ...

  9. Docker的4种网络模式

    我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: · host模式,使用--net=host指定. · container ...

  10. docker学习3-虚拟网络模式

    一.虚拟机网络模式 在理解docker网络隔离前,先看下之前虚拟机里对网络的处理,VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-onl ...

随机推荐

  1. Javascript CustomEvent

    Javascript CustomEvent 原文链接 https://davidwalsh.name/customevent,看到一篇介绍自定义事件的文章 翻译一下,不足之处,还请指正. 自浏览器诞 ...

  2. 初学者易上手的SSH-整合

    许久没更新博客了! spring还有一章aop(面向切面),我就没讲述了,你们可以去看下代理模式. 那么我们开始整合:struts2  2.3.4 ,hibernate 5.2.10 ,spring ...

  3. SxsTrace程序追踪 && 错误信息分析

    先贴错误:应用程序无法运行,并行配置不正确 ,使用命令行sxstrace.exe.百度解决版本. 起因:同事给我一 EXE,然后基于 其进行开发 dll和模块,但是无法加入进程,无法运行. SxsTr ...

  4. # openVPN+LDAP AD认证,组权限管理

    # openVPN+LDAP AD认证,组权限管理 原创内容http://www.cnblogs.com/elvi/p/7661178.html # openVPN+LDAP AD认证,组权限管理 # ...

  5. weakSelf 和 strongSelf

    最近在看SDWebImage源码,碰到一些比较绕的问题,理解了很久,然后在网上查了些的资料,才算是有了一些理解.在此记录一下. 源码如下: block会copy要在block中使用的实变量,而copy ...

  6. 38.Linux驱动调试-根据系统时钟定位出错位置

    当内核或驱动出现僵死bug,导致系统无法正常运行,怎么找到是哪个函数的位置导致的? 答,通过内核的系统时钟,因为它是由定时器中断产生的,每隔一定时间便会触发一次,所以当CPU一直在某个进程中时,我们便 ...

  7. 网页设计——3.html运行原理,基本标签

    一.运行原理 (1)本地运行 自己写的html网页用电脑上浏览器打开,就是实现了本地运行. 可以把浏览器当成一个软件,可以打开html文件. (2)远程访问 远程访问就是你用自己电脑在网上浏览一些网站 ...

  8. MySQL用户管理及SQL语句详解

    1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysql.user; +--------+--- ...

  9. eclipse设置author等注释

    windows--> preference--> PyDev --> Editor --> Templates 点击New,新建一个template,输入name(之后选择这个 ...

  10. django中request相关用法

    URL相关信息: HttpRquest对象包含当前请求url的一些信息,通过这些信息,你可以获得正在访问这个页面的用户,或者使用的浏览器: request.path :除域名以外的请求路径,以正斜杠开 ...