Docker学习笔记-网络类型

发布于:2025-09-08 ⋅ 阅读:(19) ⋅ 点赞:(0)

Docker 网络类型

1、Docker四种网络模式

(1)docker四种网络模式如下:

  • Bridge contauner 桥接式网络模式
  • Host(open) container 开放式网络模式
  • Container(join) container 联合挂载式网络模式,是host网络模式的延伸
  • None(Close) container 封闭式网络模式

(2)可以通过docker network命令查看

在这里插入图片描述

(3)docker run --net 命令可以指定使用网络模式


2、Bridge模式

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,处于七层网络模型的数据链路层,起到了交换机的作用,此主机上启动的Docker容器会连接到这个虚拟网桥上, 所以有默认地址172.17.0.0/16的地址。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。

这个命令在bridge-utils中,需要提前安装 apt install bridge-utils

在这里插入图片描述

bridge模式是docker的默认网络模式,不写–net参数,就是bridge模式。
使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。

容器拥有独立的network namespace,且拥有独立的IP、端口、路由等,使用veth pair连接docker0网桥,并以dockero网桥为默认网关。


说明:

  • –net=bridge 可省略 ,-p 指定端口映射
  • 虚拟网桥默认 IP 范围是一般都是 172.17.x.x

DNAT 的概念

DNAT,全称 Destination NAT,就是在数据包进入网络层时,把 目标 IP 地址目标端口号 改成另外一个地址或端口。

  • D → Destination(目的地址)

  • NAT → Network Address Translation(网络地址转换)

常见用途:

  • 端口映射(Port Forwarding)

  • 负载均衡(把外部请求转发到后端多台服务器)

  • Docker 容器端口转发(宿主机端口 → 容器端口)


3、host模式

如果给容器指定为host模式,那么该容器就没有独立的network namespace,而是共用宿主机的。所以,容器不会有自己的网卡信息,而是使用宿主机的IP和端口。但除了网络,其他像文件系统、进程等和宿主机依然是隔离的。

注意:容器和宿主机公用一个IP地址,但使用的端口不能被宿主机占用,也不能相同。


4、None模式

在None模式下,容器有自己的Network Namespace,但是并不为Docker 容器进行任何网络配置。也就是说,这个Docker 容器没有网卡,ip, 路由等信息。

这种类型没有办法联网,但是封闭的网络能很好的保证容器的安全性,该容器将完全独立于网络,用户可以根据需要为容器添加网卡。此模式拥有所有端口。特殊情况下才会用到,一般不用。

5、container模式

这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。
新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP,端口范围等。
可以在一定程度上节省网络资源,容器内部依然不会拥有所有端口。同样,两个容器除了网络方面,其他的如文件系统,进程列表等还是隔离的。
两个容器的进程可以通过网卡设备通信。
新建的容器与指定容器共享IP地址,但不能使用相同的端口。


以上四种网络模式只考虑的是容器和宿主机、容器和容器之间的通信,只能在同一台机器里,不能跨主机通信。


6、overlay模式–》实现跨宿主机的docker之间的通信

底层原理是VXLAN.

7、自己动手新建一个网络接口sc,让新建的容器连接到这个接口上来

在这里插入图片描述

docker inspect sc-nginx-1 查看容器详情

使用iptables 查看

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


ip add 命令输出详解

ip add 输出展示了主机上的 所有网络接口(物理的 + 虚拟的),包括 Docker 创建的虚拟网络。


1. lo

  • 名字lo

  • 类型:回环接口(Loopback)

  • 作用:本地环回测试使用,IP 地址 127.0.0.1::1,用于进程之间本机通信,不经过物理网卡。


2. ens33

  • 名字ens33

  • 类型:物理网卡(Ethernet 接口)

  • 作用:主机真实的网络接口,连接到你所在的物理网络/虚拟机 NAT/桥接环境。

  • IPv4 地址192.168.237.177/24,说明主机在 192.168.237.0/24 网段。


3. docker0

  • 名字docker0

  • 类型:Docker 默认创建的 Linux 桥接网卡(bridge)

  • 作用:当容器使用默认网络(bridge 网络模式)时,容器的虚拟网卡都会挂到这个网桥上,实现容器与主机之间通信。

  • 默认 IPv4:一般是 172.17.0.1/16,但你这里只显示了 IPv6 地址。


4. veth3a2f510@if2

  • 名字veth...

  • 类型:veth pair(虚拟以太网设备对)的一端

  • 作用:每个容器都会有一个 veth pair,一端在容器命名空间内,另一端接入主机上的 docker0(或其他 Docker 网络桥)。

  • 说明@if2 表示另一端连接到编号 2 的接口(容器内的 veth 设备)。


5. br-2737d7fbbbe5

  • 名字br-2737d7fbbbe5

  • 类型:Docker 用户自定义 bridge 网络

  • 作用:当你用 docker network create 创建自定义网络时,Docker 会在主机上创建一个 Linux bridge,并分配子网。

  • IPv4 地址172.18.0.1/16,说明该网络的容器默认分配 172.18.x.x 地址。


6. vethaa59346@if2

  • 名字veth...

  • 类型:veth pair 的一端

  • 作用:挂在 br-2737d7fbbbe5 上,对应一个容器的网络接口。另一端在容器内部。


7. vethc5ed6bb@if2

  • 名字veth...

  • 类型:veth pair 的一端

  • 作用:同上,也是 br-2737d7fbbbe5 桥接的一个容器接口。


🔹 总结

  • 物理/本机接口

    • lo:本地回环

    • ens33:主机物理网卡(192.168.237.177)

  • Docker 默认网络

    • docker0:默认 bridge

    • veth3a2f510:挂在 docker0 上的容器接口

  • Docker 自定义网络

    • br-2737d7fbbbe5:自定义 bridge(172.18.0.1)

    • vethaa59346 / vethc5ed6bb:挂在该自定义 bridge 上的容器接口

c4734961-d9ac-4f3a-9290-b979757bcb59

网站公告

今日签到

点亮在社区的每一天
去签到