Docker网络之网络模式
在Linux平台上,Libnetwork通过Network Namespace机制实现隔离。基于Network Namespace的灵活特性打造了5种Docker网络模式,分别是:none/container/host/bridge/overlay。
docker安装后会自动创建3种网络:bridge/host/none
下面分别介绍各种模式:
1、none
none模式表示不为容器配置任何网络功能,启用该模式只需要在启动时添加--net=none即可。使用该命令启动的容器完全失去网络功能,即便设置了网络参数。
2、container
container模式表示与另一个运行中的容器共享一个Network Namespace,共享意味着拥有相同的网络视图。
3、host
host网络模式可以与主机共享Root Network Namespace,容器有完整的权限操纵主机的网络配置(不建议使用这种模式)。
4、bridge
Docker默认的网络模式为Bridge,属于一种NAT网络模型。在该模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的,但容器通过宿主机的NAT规则后可以访问外网。
Docker daemon在启动的时候就会建立一个docker0网桥(通过-b参数可以指定)。每个容器使用bridge模式启动时,Docker都会为容器创建一对虚拟网络接口(veth pair)设备。这对设备一端在容器的Network Namespace,另一端在docker0——这样就实现了容器与宿主机的通信。
run nginx镜像:docker network inspect bridge
Docker 创建一个容器的时候,会执行如下操作进行IP地址的分配:
1)创建一对虚拟接口/网卡,也就是veth pair,分别放到本地主机和新容器中;
2)本地主机一端桥接到默认的 docker0 或指定网桥上,并具有一个唯一的名字;
3)容器一端放到新容器中,并修改名字作为 eth0,这个网卡/接口只在容器的名字空间可见;
4)从网桥可用地址段中(也就是与该bridge对应的network)获取一个空闲地址分配给容器的 eth0,并配置默认路由到桥接网卡。
完成这些之后,容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络。
如果不指定--network,创建的容器默认都会挂到 docker0 上,使用本地主机上 docker0 接口的 IP 作为所有容器的默认网关:docker exec -it nginx1 sh
安装brctl,查看docker0详情:brctl show
在宿主机虚拟一个docker容器网桥(docker0),docker启动一个容器时会根据docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的。这也意味着外部网络无法通过直接Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。
5、overlay
overlay模式是Docker原生的跨主机多子网网络模型。当创建一个新的网络时,Docker会在主机创建一个Network Namespace;其内有个网桥,网桥上有一个vxlan接口,每个网络占有一个vxlanID。当容器被添加到网络中时,Docker会分配一对veth网卡设备,与bridge模式类似,一端在容器里面另一端在本地Network Namespace上。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2021-04-26 Spring Boot 热插拔技术应用
2021-04-26 Spring Boot自动配置实战