【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
相关推荐
海鸥8121 分钟前
podman和与docker的比较 及podman使用
docker·容器·podman
低头不见23 分钟前
tcp的粘包拆包问题,如何解决?
网络·网络协议·tcp/ip
SKYDROID云卓小助手1 小时前
三轴云台之相机技术篇
运维·服务器·网络·数码相机·音视频
yuzhangfeng4 小时前
【云计算物理网络】从传统网络到SDN:云计算的网络演进之路
网络·云计算
TDengine (老段)4 小时前
TDengine 中的关联查询
大数据·javascript·网络·物联网·时序数据库·tdengine·iotdb
zhu12893035565 小时前
网络安全的现状与防护措施
网络·安全·web安全
GreenMountainEcho6 小时前
Kubernetes 入门篇之 Node 安装与部署
云原生·容器·kubernetes
zhu12893035566 小时前
网络安全与防护策略
网络·安全·web安全
沫夕残雪7 小时前
HTTP,请求响应报头,以及抓包工具的讨论
网络·vscode·网络协议·http
π2707 小时前
爬虫:网络请求(通信)步骤,http和https协议
网络·爬虫