# Docker 网络模式

Docker 安装之后会自动创建三种基本网络,同时 docker 允许用户进行创建自己的网络配置从而使容器网络配置更加灵活

# 前言

Docker 安装完成后可以使用 docker network ls 命令查询创建的网络模式,结果如下图会自动创建三种网络模式:bridge、host、none

同时 Docker 在启动时会开启一个虚拟的网桥设备 docker0,并且会为其配置默认的地址 172.17.0.1/16,后续所有的 Docker 容器启动后都会被桥接到 docker0 上面,并自动分配一个 ip 地址,我们可以用 ip addr 命令查询下详情信息

# bridge 模式

bridge 网络模式下的容器没有公有 ip,只有宿主机可以访问,而外部主机无法访问,但是可以通过配置 NAT 规则进行访问

  • bridge 模式的实现依赖的是 veth-pair 技术,veth-pair 可以理解为在宿主机上面创建两个虚拟网络接口,通过技术特性保证无论哪个 veth 接收到网络报文都会传输给另一方

  • 如图,Docker Daemon 将 veth0 附加到 docker0 创建的 docker0 设备上,同时将 veth1 添加到 Docker Container 所属的 namespace 上,改名为 eth0

  • 宿主机的网络报文若发往 veth0,则立即会被 eth0 接收,实现宿主机到 Docker Container 网络的联通性;同时,也保证 Docker Container 单独使用 eth0,实现容器网络环境的隔离性

  • bridge 可以很好的实现容器的网络环境隔离,但是此模式下的容器不具有公有 ip, 会导致虚机与外界不能直接进行通信,虽然可以通过 NAT 模式中间代理实现通信,但是多有不便。

# host 模式

host 模式是对 bridge 模式的补充,采用 host 模式的虚机可以直接借用宿主机的 IP 与外界进行通信

host 模式会占用宿主机的网络资源与端口资源,同一个端口,比如宿主机的 80 端口,只能被一个服务占用,如果被某个容器占用了,宿主机就不能用,后续的容器也不能用,直到优先抢到 80 端口的服务,停止提供服务(放弃 80 端口)

# none 模式

此模式关闭了容器的网络功能,仅有独自的网络空间(一个空架子),并且该模式不会给容器分配任何网络资源,包括虚拟网卡、路由、防火墙、IP、网关、端口等

# 3+2 剩余模式

除了上面提到的三种可以通 ls 命令查看的模式之外,docker 还支持其余两种模式,分别是 container 与自定义模式

  • container 模式

    它是 bridge 和 host 模式的合体,优先以 bridge 方式启动启动第一个容器,后面的所有容器启动时,均指定网络模式为 container,它们均共享第一个容器的网络资源,除了网络资源,其他资源,容器彼此之间依然是相互隔离的

  • 自定义模式

    docker 提供了三种自定义网络驱动分别是 bridge、overlay、macvlan,bridge 驱动类似默认的 bridge 网络模式,但增加了一些新的功能,overlay 和 macvlan 是用于创建跨主机网络

# 命令记录

命令记录
1
2
3
4
5
6
7

#查看docker容器的所有网络模式
docker network ls
#查看哪些容器在该网络模式下
docker network inspect bridge
#查询容器网络模式
docker inspect <container> | grep NetworkMode

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

位菠萝 微信支付

微信支付

位菠萝 支付宝

支付宝

位菠萝 贝宝

贝宝