Docker 教程

Docker 容器网络模式

Docker 容器网络模式(Container Network Model,CNM)是 Docker 用于管理容器网络连接的架构。Docker 主要有以下几种容器网络模式。

bridge 网络模式(默认)

bridge 是 Docker 默认的网络模式。当 Docker 启动时,会创建一个名为docker0的 Linux 网桥(网桥是 Linux 系统中用于连接不同网络段或网络设备的二层或数据链路层的网络设备),它在功能上类似于传统网络中的交换机,能够将多个网络接口连接到同一个广播域中。例如:

hx@hxvm:~$ ifconfig docker0
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:cf:33:de:33  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

⚠️注意:

(1)每个新创建的容器都会连接到这个网桥,Docker 会为容器分配一个独立的 IP 地址,并在容器内部设置默认路由,使得容器可以通过这个 IP 地址与同一网桥下的其他容器或外部网络进行通信。

(2)容器之间的通信通过docker0网桥进行转发。

(3)容器可以通过 IP 地址直接相互访问,无需进行端口映射。

(4)与外部网络通信时,通常需要通过端口映射将容器内的服务暴露给主机的特定端口,外部网络通过访问主机的 IP 地址和映射端口来访问容器内的服务。

host 网络模式

在 host 网络模式下,容器直接使用主机的网络栈,不进行任何网络隔离。容器的网络接口与主机的网络接口相同,容器共享主机的 IP 地址和端口空间。

⚠️注意:

(1)容器可以直接使用主机的网络资源,性能较高,因为不需要进行额外的网络转发。

(2)容器与主机以及同一主机上的其他容器之间没有网络隔离,可能会导致端口冲突问题。

(3)容器与主机共享网络栈,意味着容器与宿主机在网络层面几乎没有隔离。如果容器内的应用存在网络漏洞,例如遭受网络攻击(如端口扫描、恶意网络连接等),可能会直接影响到宿主机的网络安全,因为容器与宿主机处于相同的网络空间。

none 网络模式

在 none 网络模式下,Docker 不为容器创建任何网络环境。容器只有一个本地的回环接口(lo),不能与外部网络或其他容器进行通信。

⚠️注意:提供了最高级别的网络隔离,适用于那些不需要网络连接的特殊场景。

overlay 网络模式(适用于多主机网络)

该模式用于在多个 Docker 守护进程(主机)之间创建一个覆盖网络。它使用了 VXLAN 等技术在不同主机之间进行数据包封装和解封装,使得容器可以跨主机通信。通常需要一个键值存储服务(如 Consul、Etcd 等)来实现分布式网络的管理。

⚠️注意:适用于大规模的容器集群部署,可以实现容器在不同主机之间的无缝通信,但配置相对复杂。

macvlan 网络模型(适用于多主机网络)

该模式允许为容器分配一个与主机物理网卡直接连接的 MAC 地址,使得容器在网络上表现为一个独立的物理设备。可以将容器直接连接到物理网络,实现与其他物理设备或虚拟机的直接通信。

⚠️注意:需要对物理网络有一定的了解和管理权限,适用于对网络性能要求较高的场景。

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号