【docker】docker网络六种网络模式

Docker 网络模式总结

网络模式 描述 使用场景
bridge 默认的网络模式,容器之间通过虚拟网桥通信,容器与宿主机隔离。 单机部署、本地开发、小型项目
host 容器与宿主机共享网络堆栈,容器直接使用宿主机的 IP 地址。 高性能网络应用、日志处理、大量与宿主机网络交互的场景
none 容器没有网络接口,完全隔离,不能与外部通信。 安全隔离、高度自定义网络配置的容器
container 容器共享网络命名空间,包括 IP 地址和端口空间。 紧密耦合的容器,需要共享网络堆栈的场景
overlay 跨多个主机的容器通信,常用于分布式系统。 微服务架构、跨主机容器通信、分布式应用
macvlan 容器拥有独立的 MAC 地址,容器直接与物理网络通信。 需要与物理网络直接通信、容器作为网络设备的场景

Bridge 网络模式

在 Docker 中,bridge 是默认的网络模式。每当你创建一个容器但没有指定网络时,Docker 会自动将容器连接到名为 bridge 的网络。

在此模式下,容器会连接到一个虚拟的局域网(LAN),容器间通过虚拟网桥进行通信,容器与宿主机的通信通常通过端口映射进行。

特性

  • 默认网络模式,适用于单机环境。
  • 容器间通过虚拟网桥通信。
  • 容器与宿主机的网络隔离,需要通过端口映射来访问容器。
  • 每个容器会自动分配一个私有 IP 地址,容器间使用该地址进行通信。

使用场景

  • 本地开发环境:在单台机器上运行多个容器,容器之间需要相互通信。
  • 小型项目:适合小型的单机部署,无需跨主机通信。

创建和使用示例

bash 复制代码
docker run -d --name my_container --network bridge nginx

查看桥接网络

bash 复制代码
docker network inspect bridge

Host 网络模式

host 网络模式下,容器与宿主机共享网络堆栈,容器直接使用宿主机的 IP 地址和端口。

这种模式下容器与宿主机之间没有网络隔离,容器的端口直接映射到宿主机的端口。

特性

  • 容器与宿主机共享网络堆栈,因此没有网络隔离。
  • 高效,容器和宿主机之间的网络性能较好。
  • 适用于需要高性能网络通信的容器。

使用场景

  • 高性能要求的应用:例如需要较低延迟和较高吞吐量的网络应用。
  • 日志处理、数据流处理 :当容器需要大量与宿主机进行网络交互时,使用 host 网络可以避免 Docker 网络的额外开销。

创建和使用示例

bash 复制代码
docker run -d --name my_container --network host nginx

None 网络模式

none 网络模式下,容器没有网络接口,也就是说,容器与宿主机或其他容器无法通信。

该模式下容器会被完全隔离,不会自动分配 IP 地址。

特性

  • 容器没有任何网络连接。
  • 适用于需要完全隔离的容器,或者需要容器手动配置网络的场景。
  • 没有端口映射和通信能力,所有的网络功能都需要通过其他方式手动配置。

使用场景

  • 高度安全的环境:例如,需要完全隔离的容器,不允许容器与外界网络通信。
  • 需要自定义网络配置的容器:在一些特殊场景下,容器的网络配置需要完全由用户手动控制。

创建和使用示例

bash 复制代码
docker run -d --name my_container --network none nginx

Container 网络模式

container 模式允许一个容器共享另一个容器的网络命名空间。

容器之间不仅共享 IP 地址,还共享端口空间和网络接口。换句话说,它们会"合并"成一个网络堆栈。

特性

  • 容器共享相同的网络命名空间,包括 IP 地址和端口。
  • 容器之间的通信更为紧密,适合需要直接共享网络堆栈的场景。
  • 适合将多个容器作为单一单元进行管理和配置。

使用场景

  • 密切耦合的容器:当你有多个紧密耦合的容器,它们需要直接共享网络时,例如一个容器作为代理服务,另一个容器提供业务逻辑,容器之间需要共享 IP 地址。

创建和使用示例

bash 复制代码
# 运行第一个容器
docker run -d --name container1 nginx

# 运行第二个容器,并让其共享第一个容器的网络
docker run -d --name container2 --network container:container1 nginx

Overlay 网络模式

overlay 网络模式用于跨多个 Docker 主机的容器之间通信。它通过 Docker Swarm 或 Kubernetes 等集群工具来实现容器跨主机的通信。

使用 overlay 网络时,Docker 会在容器之间创建一个虚拟网络,容器间的通信不受物理主机限制。

特性

  • 支持容器跨多个 Docker 主机通信。
  • 必须在 Swarm 模式下创建和使用。
  • 容器间的通信通过虚拟 IP 地址进行,外部网络无法直接访问容器,需使用负载均衡或端口映射。

使用场景

  • 分布式应用和微服务:适用于分布式架构,尤其是微服务应用,容器可能部署在不同的物理主机上。
  • 跨主机的容器通信 :当你的应用需要跨多个物理主机进行容器间的通信时,overlay 网络是最佳选择。

创建和使用示例

bash 复制代码
# 创建一个 overlay 网络
docker network create -d overlay my_overlay_network

# 在两个不同的主机上分别启动容器,并连接到 overlay 网络
docker service create --name service1 --network my_overlay_network my_image
docker service create --name service2 --network my_overlay_network my_image

Macvlan 网络模式

macvlan 网络模式使容器可以拥有自己的 MAC 地址,容器就像物理主机一样在网络中进行通信。

容器具有直接的物理网络访问能力,可以进行网络广播等操作。

特性

  • 容器拥有独立的 MAC 地址,容器可以直接与宿主机网络进行通信。
  • 容器与宿主机网络隔离,容器之间的通信也通过 macvlan 网络进行。
  • 容器能与外部物理网络进行通信,非常适合需要容器和物理网络无缝连接的场景。

使用场景

  • 需要容器和物理网络直接通信的场景:例如,需要容器作为网络设备或需要处理广播流量的场景。
  • 在大型企业中运行大量容器 ,需要每个容器都能在物理网络上独立存在时使用 macvlan

创建和使用示例

bash 复制代码
# 创建一个 macvlan 网络
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 my_macvlan_network

# 运行一个容器并连接到 macvlan 网络
docker run -d --name my_container --network my_macvlan_network my_image
相关推荐
嵌入式学习菌5 分钟前
ESP32 智能插座调试软件功能测试
网络·物联网
醇氧9 分钟前
OSI 七层网络模型总结
网络
rcms152702692181 小时前
Nikon 4T070-360-1精准控制器模块
网络
野熊佩骑2 小时前
Kubernetes实战系列文章(三) 之 K8S运维常用命令
linux·运维·docker·微服务·云原生·容器·kubernetes
数安旭说2 小时前
终端防火墙深度拆解:网络隔离、进程级管控与流量治理的落地避坑指南
网络·数据安全·企业安全·防火墙·终端安全·终端防火墙·违规外联
数智工坊3 小时前
NTIRE2024×4图像超分竞赛综述|Mamba崛起、数据缩放、频域增强成为新趋势
网络·人工智能·深度学习·cnn·机器人
聚美智数3 小时前
网安查询-备案查询-网络安全查询API接口介绍
网络·数据库·web安全
一个向上的运维者4 小时前
Kubernetes 网络三部曲:CNI、kube-proxy 与 CoreDNS 是如何协作的?
网络·容器·kubernetes
2301_815091014 小时前
TCP 并发服务器模型:4 种 IO 模型完整梳理
服务器·网络·tcp/ip
斑马1394 小时前
Linux软件编程学习笔记(十二)——TCP并发服务器模型
java·服务器·网络