Docker Network
Docker网络内容概览:
- docker网络的组成 – 沙盒 网络 端点
- docker容器之间的网络打通是通过
--link
和expose
端口暴露实现 - docker容器与宿主机之间的网络互联是根据端口映射实现
1.核心概念
在顶层设计中,Docker网络架构由3个主要部分构成:CNM、Libnetwork和Driver;
- CNM(Container Network Model) – CNM是设计标准,规定了容器网络架构的基础组成要素
- Libnetwork – CNM的具体实现,并且被Docker采用,由Go语言编写,实现了CNM中列举的核心组件
- Driver – 通过实现特定网络拓扑的方式来拓展该模型的能力
1.1 CNM
CNM是Docker网络架构模型,该方案是开源的并且支持插接式连接;
抽象的定义了3个基本要素:
- 沙盒(sandbox)是个独立的网络栈,其中包括以太网接口、端口、路由表以及DNS配置;
- 端点(endpoint)是虚拟网络接口,就像普通网络接口一样,端点主要职责是负责创建连接,以及将沙盒连接到网络;
- 网络(network)是802.1d网桥(类似大家熟知的交换机)的软件实现,网络就是需要交互的终端的集合;
1.2 Libnetwork
Libnetwork是Docker对CNM的实现,实现了网络架构的全部功能,还提供了本地服务发现
和基础的容器负载均衡
;
- 沙盒(Sandbox)
提供了容器的Endpoint套接字、IP 路由表、防火墙等,实现隔离了容器网络与宿主机网络,形成了完全独立的容器网络环境; - 网络(Network)
Docker内部的虚拟子网,网络内的参与者相互可见并能够进行通讯,Docker的这种虚拟网络也是于宿主机网络存在隔离关系的,其目的主要是形成容器间的安全通讯环境; - 端点(Endpoint)
端点是位于容器或网络隔离墙之上的洞,其主要目的是形成一个可以控制的突破封闭的网络环境的出入口;
当容器的端点与网络的端点形成配对后,就如同在这两者之间搭建了桥梁,便能够进行数据传输了;
Docker环境中最小的调度单位就是容器,CNM组件与容器进行关联的——沙盒被放置在容器内部,为容器提供网络连接;
服务发布和服务发现是Docker Swarm使用的,在Swarm中进行总结;
1.3 Driver
Docker封装了一系列本地驱动,不同的驱动可以通过插拔的方式接入Libnetwork来提供定制化的网络拓扑,实现开箱即用的效果;
Docker生态系统中的合作伙伴通过提供驱动的方式,进一步拓展了Docker的网络功能;
目前有两类,共五种驱动,Bridge和Overlay使用频率较高;
两类网络驱动:
- 单机桥接网络(Single-Host Bridge Network):Bridge | Host | None
- 多机覆盖网络(Multi-H