【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
相关推荐
跳跳的向阳花25 分钟前
05、Docker学习,常用安装:Mysql、Redis、Nginx、Nacos
学习·mysql·docker
IT 古月方源29 分钟前
GRE技术的详细解释
运维·前端·网络·tcp/ip·华为·智能路由器
安全方案2 小时前
2024信息安全网络安全等安全意识(附培训PPT下载)
网络·安全·web安全
Bling_2 小时前
Springboot Bean创建流程、三种Bean注入方式(构造器注入、字段注入、setter注入)、循坏依赖问题
java·spring boot·spring·容器
黑客老陈3 小时前
BaseCTF scxml 详解
开发语言·网络·python·sql·安全·web安全
LLLuckyGirl~4 小时前
计算机网络之---ICMP协议与Ping命令
服务器·网络·计算机网络
LLLuckyGirl~4 小时前
计算机网络之---网络拓扑
网络·计算机网络
蚁景网络安全4 小时前
WebSocket 测试入门篇
网络·websocket·网络协议
bachelores4 小时前
计算机网络_数据链路层
网络·网络协议·计算机网络
路星辞*5 小时前
基于访问表的安全防范策略
运维·网络·安全·智能路由器·acl