# 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 |
|