文章目录

  • 一、docker网络顶层设计
  • 二、CNM三要素
  • 三、默认创建的网络
  • 四、bridge网络模式(默认)
  • 五、none网络模式
  • 六、host网络模式
  • 七、container复用模式
  • 八、自定义bridge模式
  • 总结一下

一、docker网络顶层设计

docker网络的顶层设计层面,包含了三个核心部分

  • CNM (Container Network Model)是docker容器网络模型(即设计标准),它规定了 Docker 网络架构的基础组件是:SandBox、EndPoint以及Network。
  • Libnetwork 是 CNM标准的具体实现,它和docker一样都是使用Go 语言编写的,实现了 CNM 设计的基础组件,此外它还实现了本地服务发现(Service Discovery)、基于 Ingress 的容器负载均衡,以及网络控制层和管理层功能。
  • 驱动:驱动通过实现特定网络类型的方式扩展了Docker网络栈。Docker 封装了若干内置驱动,比如:在 Linux 上包括 Bridge、Overlay 以及 Macvlan,在 Windows 上包括 NAT、Overlay、Transport 以及 L2 Bridge驱动。 第三方厂商也可以自己编写 Docker 网络驱动,比如: Calico、Contiv、Kuryr 以及 Weave驱动。

二、CNM三要素

。Sandbox(沙盒):提供了独立的容器虚拟网络栈,包括端口套接字、IP路由表、防火墙、DNS配置。 它的核心作用在于将容器网络与宿主机网络隔离开,形成了完整的独立的容器网络环境。
。Network:定义了Docker内部的虚拟子网,用于形成容器之间的网络联通。
。Endpoint,提供虚拟的网路接口,看上去和你在宿主机上的网络接口是一样的。它负责创建连接,并将容器独立的网络沙盒连接到Network中。 每个容器所在的 Sandbox至少包含两个 Endpoints,一个gwbridge用于访问外部网络,另一个br0用于容器间网络互通。

前文介绍了docker容器基础的网络模型,其中重要的是我们知道了驱动程序分为原生内置,以及第三方实现驱动。实际上我们后面学习docker网络,就是在学习这些驱动面向用户的使用方法。docker内置了驱动:在 Linux 上包括 Bridge、Overlay 以及 Macvlan。并由此衍生出若干的网络模式: bridge(默认)、host、container复用模式、none、用户自定义模式(bridge、overlay、macvlan)。

我们本节就说明一下 bridge、host、container复用模式、none这几种基础的网络模式。

三、默认创建的网络

安装完 Docker,宿主机默认会创建三个网络,分别是bridge网络,host网络,none网络,可以使用docker network ls命令查看。

# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
cc425782673c   bridge            bridge    local
a5b5700dedb4   host              host      local
fca0cfbdc8f2   none              null      local

并且在docker安装时会创建一个名称为docker0的linux网络接口,在不通过--network参数特殊指定的情况下,该宿主机上所有新创建的容器都会连接到docker0网络接口上面。docker0网络接口可以在宿主机上用ifconfig命令查看到。

四、bridge网络模式(默认)

bridge网络模式是默认的网络模式,我们通过下面几个步骤,来理解以下bridge网络模式工作原理

  • 第一步:查看容器内部网络接口:我们运行一个容器,如docker run -it --name test centos /bin/bash。因为使用-it参数,此时我们的命令行窗口正在与容器进行交互。执行ip addr命令,发现容器内部有两个网络接口一个是eth0(注意39这个数字,下文用到),一个是lo(本地回环接口-127.0.0.1)。
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP>   //此处省略若干不重要信息
39: eth0@if40: <BROADCAST,MULTICAST,UP,LOWER_UP>  //此处省略若干不重要信息
  • 第二步:测试容器连接宿主机外网: ping 192.168.1.111能够ping通,我的容器宿主机ip是192.168.1.111,证明容器与宿主机之间的网络是通的。

  • 第三步:查看宿主机网络接口 :另外开一个宿主机访问终端,在宿主机上使用ifconfig命令,我们会看到这样两个网络接口:docker0,veth<随机串>(如:veth1d3961b)这样2个网络接口。其中docker0是docker安装的时候创建的,veth1d3961b是容器启动的时候创建的。

我们可以猜想一定是上面提到的这些网络接口存在网络连接,才会让容器与宿主机之间存在网络联通。我们使用下面的命令验证一下(都在宿主机上执行)。

# ethtool -S veth1d3961b
NIC statistics:peer_ifindex: 39

上面的命令说明veth1d3961b相当于一根虚拟网线,一端连接到容器内部的39号网络接口eth0。再看下面的命令,veth1d3961b的另一端连接的是docker0。

# brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.0242f757aefd       no              veth1d3961b

如果brctl命令不存在,使用yum install bridge-utils安装


结合上面的这张图,再去理解一下上面的操作。

五、none网络模式

使用下面的命令行创建的容器,使用none网络模式,即:默认没有网络配置,不具有网卡、IP、路由信息。

docker run -it --net=none --name test1 centos /bin/bash

这种模式一般又被称为“隔离模式”,常被用于在容器内完成CPU密集型任务,计算完成后将结果保留到磁盘上。在此过程中,不与外界进行网络连接,从网络层面(断开)保证计算执行过程的安全性。

docker0和宿主机的网络命名空间都不变,只是与容器的网络命名空间没有任何连接。容器之间也没有网络连接。

六、host网络模式

使用下面的命令行创建的容器,使用host网络模式。

docker run -it --net=host --name test2 centos /bin/bash

在这种模式下,容器不会获得独立的Network Namespace,与宿主机操作系统共用一个Network Namespace。即:容器不会虚拟自己的网卡,不会配置自己的IP。宿主机的IP就是容器的IP,容器的端口就是宿主机的端口,所以同一个宿主机下的多个容器不能暴漏同一个端口。


显而易见的是这种网络模式简单,没有那么多的网络接口及数据转发,所以它是性能相对比较好的网络模式。

七、container复用模式

使用下面的命令行创建的容器使用container复用模式,添加 --net="container:name or id"启动参数可以复制一个已经存在的容器的网络配置, 被复制的容器与复制容器两者的网络完全相同。

  • 使用下面的命令创建出来的容器都是bridge模式,二者的ip以及网络配置都是一样的(默认bridge模式)
docker run -it  --name test3 centos /bin/bash;
docker run -it  --net="container:test3" --name test4 centos /bin/bash;
  • 使用下面的命令创建出来的容器都是host模式,二者的ip以及网络配置都是一样的(host模式),并且和宿主机一样。
docker run -it  --net=host --name test5 centos /bin/bash;
docker run -it  --net="container:test5" --name test6 centos /bin/bash;

八、自定义bridge模式

bridge模式还支持自定义,如下所示:在宿主机范围内定义了一个名称为zimug-bridge的网络,网络模式是bridge。

docker network create --driver bridge zimug-bridge

自定义完成之后,可以通过命令查看该网络,如下所示:

# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
cc425782673c   bridge            bridge    local
a5b5700dedb4   host              host      local
fca0cfbdc8f2   none              null      local
27c745cc28a4   zimug-bridge      bridge    local

我们通过下面的2个命令,新建2个容器都加入zimug-bridge网络

docker run -it --network=zimug-bridge --name test5 centos /bin/bash;
docker run -it --network=zimug-bridge --name test6 centos /bin/bash;

由下图可见,test5容器被分配的ip是172.19.0.2

由下图可见,test6容器被分配的ip是172.19.0.3

从test5(172.19.0.2)到test6(172.19.0.3)的网络ping得通,反之亦然!网络环境可以由下图表示

这个图是不是和上文中(《二、bridge网络模式(默认)》)的图有点像,是的,唯一区别就是将docker0换成了我们自建的网络zimug-bridge,其他的没任何区别。

总结一下

面试常被问道得问题总结一下,谈一下docker基础网络模式及network namespace隔离性。

网络模式 简介
bridge 容器具有独立的network namespace,会将容器连接到docker0虚拟网桥,并配置IP地址,默认模式。
host 容器没有独立的network namespace,和宿主机共用网络。
none 容器具有独立的network namespace,与宿主机网络隔离,但并没有对其进行任何网络设置。
container 容器和某一个已存在的容器共享network namespace。

【docker系列】四种基础网络模式及自定义网络相关推荐

  1. Docker的四种网络模式

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

  2. 5、Docker 的四种网络模式

    5.1 Docker 的四种网络模式 网络模式 网络配置 说明 host(开放式网络模式) –network host 容器和宿主机共享 Network namespace container(联合挂 ...

  3. 四种电子商务支付模式:支付网关模式、网上银行模式、第三方支付模式和手机支付模式。

    网站浏览 分为 游客浏览模式(即无用户登录)四种电子商务支付模式:支付网关模式.网上银行模式.第三方支付模式和手机支付模式. 四种电子商务支付模式:支付网关模式.网上银行模式.第三方支付模式和手机支付 ...

  4. SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

    SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1. ...

  5. Oracle的启动与停止(三个启动阶段和四种停库模式)

                                      Oracle的启动与停止(三个启动阶段和四种停库模式) 大家都知道Oracle数据库支持各种平台,比较常用的平台是windows8和 ...

  6. wifi四种省电模式的控制

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! WIFI ...

  7. Docker ❀ 容器内部/外部通信、端口映射、网络模式、自定义容器网络

    文章目录 1.网络通讯 命名空间类型 2.网络模式 Docker服务默认存在四组网络模式 3.端口映射 -p : 容器指定端口映射为本地随机端口: -p : 容器指定端口映射为本地指定端口: -p : ...

  8. 四种软件商业模式的分析

    第一种.软件企业的传统商业模式: 微软为首的软件商业模式成功引领了近20年的辉煌,即使现在看来都有点像一本万利:首先要有一批高素质的人来开发软件,开始时成本很高,但是当软件开发出来后,每个使用这种软件 ...

  9. gRPC 的 4 种基础通信模式

    题图 |  from freepik 本文将讨论 gRPC 应用程序的 4 种基础通信模式:一元 RPC.服务器端流 RPC.客户端流 RPC 以及双向流 RPC.在这个过程中,我们会使用一些真实用例 ...

最新文章

  1. Google团队在DNN的实际应用方式的整理
  2. Qt下的OpenGL 编程(3)绘制平面几何体
  3. Windows Server 2008 R2之管理Sysvol文件夹
  4. ad采集 cube配置 dma_【技术技巧】 使用MCC数据采集设备获取模拟波形
  5. zabbix mysql复制延迟_Zabbix监控mysql主从复制状态
  6. .NET 对接JAVA 使用Modulus,Exponent RSA 加密
  7. github可以刷星吗_GitHub 没有 star,该写进简历里吗?
  8. https方式nginx 代理tomcat访问不带www的域名301重定向跳转到www的域名帮助seo集中权重...
  9. David Pozar 微波工程读书笔记(一)
  10. 算法设计与分析-动态规划
  11. LaTEX 表格内容换行
  12. I'm just a baby——8月份英语总结
  13. 练遇24H智能健身房获巨额融资,突破传统局限,打造新健身时代
  14. Syntax error, annotations are only available if source level is 1.5 or greater
  15. windows ios良心软件推荐
  16. 任务整理总结(7.5)
  17. 关于环境依赖问题的反思NO.1
  18. caj转pdf的办法
  19. git初使用之配置-.gitconfig .gitignore
  20. OllyDbg操作——TraceMe.exe调试

热门文章

  1. 颜色空间探究:RGB、HSV和HSL
  2. 用c#编写一个vb 工程源码分析工具(带源码工程下载)
  3. 读《桥—巴拉克•奥巴马的人生及其崛起》有感
  4. phpcms选择文件无法加载插件怎么办_浏览器显示无法加载插件怎么办
  5. Day73.SpringMVC案例:影院系统、使用Restful风格重构
  6. linux:Nginx+https双向验证(数字安全证书)
  7. 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第13章 处理PDF和Word文档(2)】
  8. [Android]iTextG与SpongyCastle踩坑经历
  9. Centos7 配置静态 IP 地址
  10. 职业“小三劝退师”,真的能拯救你的婚姻吗?