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