11.1 Docker 网络-简介
- 容器网络模型 (CNM)
- Libnetwork 是 CNM 的实现
Docker 封装了一系列本地驱动:
- 单机桥接网络 (Single-Host Bridge Network)
- 多机覆盖网络 (Multi-Host Overly)
- 接入 VLAN
- Libnetwork 提供了本地服务发现和基础的容器负载均衡解决方案
11.2 Docker 网络-详解
11.2.1 基础理论
Docker 网络架构主要由3个主要部分构成:
- CNM: 设计标准
- Libnetwork: 具体实现
- 驱动
顶层设计:
- CNM
3个基本要素:
- 沙盒 (Sandbox): 独立的网络栈
- 终端 (Endpoint): 虚拟网络接口
- 网络 (Network): 网桥 (类似交换机) 的软件实现
CNM 组件与容器进行关联:
加入 Docker 主机:
Libnetwork
- CNM 是设计文档
- Libnetwork 是标准实现, 开源, Go 编写, 跨平台
- 实现了本地服务发现 (Service Discovery)
- 基于 Ingress 的容器负载均衡
- 网络控制层, 管理层
驱动
- 负责实现数据层
- 网络连通性, 隔离性
不是很好理解该层.
控制层, 管理层与数据层的关系:
11.2.2 单机桥接网络
- 最简单
- 单机: 该网络只能在单个 Docker 主机上运行, 并且只能与所在 Docker 主机上的容器进行连接
- 桥接: 802.1.d 桥接的实现 (二层交换机)
容器无法直接进行通信 (不在一个网段中的话):
bridge 网络和 docker0 网桥之间的关系:
补充接入 bridge 网络的容器:
创建单机桥接网络:
$ docker network create -d bridge localnet
查看网桥:
$ brctl show
目前的网桥配置:
新建容器并接入新建的桥接网络中:
$ docker container run -d --name c1 --network localnet alpine sleep 1d
关系:
- 如果再创建一个新容器并加入到 localnet, 那么它和 c1 之间可以 ping 通
端口映射:
11.2.3 多机覆盖网络
- 允许单个网络包含多个主机
创建:
$ docker network create --d overlay
11.2.4 接入现有网络
- Docker 内置的 Macvlan 驱动用于容器与物理之间的通信
- 需要提供 mac 和 ip
容器化应用连接到网络:
- 需要将主机网卡 (NIC) 设置为混杂模式 (Promiscuous Mode)
物理网络配置两个 VLAN:
添加一个 Docker 主机并连到该网络:
将容器接入 VLAN 100, 首先使用 Macvlan 驱动创建新的 Docker 网络, 但是还需要设置几个参数:
- 子网信息
- 网关
- 可分配给容器的 IP 范围
- 主机使用的接口或者子接口
创建一个 macvlan100 的 Macvlan 网络, 该网络会连接到 VLAN 100:
$ docker network create -d macvlan --subnet=10.0.0.0/24 --ip-range=10.0.0.0/25 --gateway=10.0.0.1 -o parent=eth0.100 macvlan100
部署到该网络中:
$ docker container run -d --name mactainer1 --network macvlan100 alpine sleep 1d
多个 Macvlan 网络:
用于故障排除的容器和服务日志
**
daemon 日志存储位置:
- Systemd: Journald,
journalctl -u docker.service
容器日志:
docker container logs