网络
由于应用被隔离在不同的容器中,因此网络 几乎是 容器间进行通讯的唯一手段。 Docker 的网络基于 容器网络模型 。
提示
容器网络模型实际上的从高层上描述容器的通讯方式,但是底层依然是互联网常用的桥接网络、覆盖网络等模式,这点与虚拟机是相同的。
容器网络模型
CNM 定义了容器网络的三个要素:
沙盒 :沙盒包含一个独立的、完整的网络栈。包含了以太网接口、端口、DNS 配置
终端 :终端就是网络接口
网络 :网络是 802.1d (网桥)的软件实现
其具有以下特性:
一个容器可以拥有多个终端
一个终端只能加入一个网络
不同网络之间的终端是相互隔离的
提示
同一容器中的终端如果不在同一个网络下,那它们也是相互隔离的
网络驱动
网络驱动是 CNM 的底层实现,代表了其支持的网络类型,其一般包括以下几种:
桥接 网络:桥接网络使容器能够访问宿主网络,反之则需要进行端口映射
主机 网络:容器和主机之间无任何隔离
覆盖 网络:覆盖网络使多个服务器之间的容器可以相互通信
macvlan 网络:容器直接连接到物理网络,不经过守护进程转发
无 网络:不启用网络链接
参见
Docker Compose 中的网络
例如:
version: "3.9"
services:
wordpress:
image: wordpress:latest
networks:
- external
ports:
- "8000:80"
networks:
external:
name: backend
FirewallD
Docker 直接使用 iptables ,而 firewalld 使用 nftables 。因此 Docker 在一定程度上是脱离 firewalld 的掌控的,但是所幸的是 firewalld 新增了 policy 来管理 docker 中的流量。