当前位置: 首页 > news >正文

【Docker 07】Network - 网络

🌈 一、Docker 为什么需要网络管理

  • 容器本质上是隔离的独立运行环境,但在实际应用时,容器之间、容器与宿主机、容器与外界必须进行通信,这就需要用到网络管理。
  1. 容器之间需要通信。
  2. 容器需要对外提供服务。
  3. 实现容器和宿主机的安全隔离。
  4. 容器可能根本就不需要网络。

🌈 二、Docker 网络架构简介

  • Docker 容器网络是未应用程序所创造的虚拟环境的一部分,它可以让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等与网络有关的模块。
  • Docker 为了实现容器网络,主要采用的网络架构由 CNMLibnetworkDriver 这三部分组成。

⭐ 1. 容器网络模型 CNM

  • 容器网络模型(CNM:Container Network Model)规定了 Docker 网络的基础组成要素:SandboxEndpointNetwork

image-20250616164601362

1. 沙盒 Sandbox

  • 提供了容器的虚拟网络栈(端口、套接字、IP 路由表、防火墙、DNS 配置等),主要用于隔离容器网络和宿主机网络,形成了完全独立的容器网路环境。
  • 每个容器对应一个 Sandbox,Sandbox 本质上就是一个网络命名空间(Linux Namespace),一个 Sandbox 可以连接多个网络端点(Endpoint)。

2. 端点 Endpoint

  • Endpoint 是一个用来连接 Sandbox 和网络(Network)的接口(可以有自己的 MAC、IP 地址等),它的主要职责是创建连接
  • 一个 Endpoint 只能接入一个 Network,当容器需要接入多个网络时,就需要多个 Endpoint(如 Container B)。

3. 网络 Network

  • Network 是多个 Endpoint 的集合,是 Docker 内部的虚拟子网,使网络内的参与者可以进行通信。
    • 如:Container A 和 B 可以借助 Network A 进行通讯,但 Container A 和 C 不能通过 Container B 的两个 Endpoint 进行通信。
  • 一种 Network 对应着一个网络驱动 Driver(如 bridge、overlay、macvlan、host 等)。

⭐ 2. 容器网络管理库 Libnetwork

  • Libnetwork 是 CNM 的一个标准实现,它实现了 CNM 定义中的全部三个组件(Sandbox、Endpoint、Network)。

Libnetwork 的核心职责

功能说明
创建 / 删除网络提供 API 创建自定义网络(如 docker network create)
分配网络资源包括 IP 地址、MAC 地址、网段、路由等
管理 Endpoint管理容器与网络的连接接口
维护 Sandbox容器的网络堆栈和配置
支持多网络驱动内置多个驱动,支持外部插件
与 Docker Engine 集成Docker 调用 Libnetwork 来完成网络配置

⭐ 3. 网络驱动 Driver

  • Driver 是 Libnetwork 和底层网络实现之间的桥梁,负责具体网络功能的实现(真正执行容器间的网络连接逻辑、接口配置和数据转发机制)。
  • Driver 决定了:容器如何关联、容器如何访问外部网络、网络隔离方式、IP / MAC 分配策略、是否支持跨主机通信等。

Docker 默认内置的网络驱动

驱动类型说明
Bridge默认网络驱动,基于 Linux 网桥实现容器间的通信
Host容器与宿主机共享网络命名空间,性能高但无隔离
Overlay跨主机通信驱动,通过 VXLAN 隧道构建虚拟网络
MacVLan为容器分配宿主机的物理网卡 IP,直接和外部通信
IPVLan为容器分配宿主机的 IP,共享 MAC 地址
None容器无网络,只保留 loopback(本地环回),完全隔离网络

🌈 三、常见网络类型介绍

⭐ 1. 桥接网络 bridge

  • Docker 默认使用的网络类型,每创建一个容器,Docker 就会自动将其连接到默认的 bridge 网络。
  • bridge 驱动会在 Docker 管理的主机上创建一个 Linux 虚拟网桥(docker0)。默认情况下,网桥上的容器可以相互通信,也可以通过 bridge 驱动程序配置,来实现对外部容器的访问。
  • 使用场景:当需要多个容器在同一个 Docker 主机上通信时,桥接网络是最佳选择。

⭐ 2. 主机网络 host

  • 对于独立容器,移除了容器和 Docker 宿主机之间的网络隔离(容器不会获得自己的网络命名空间,而是直接使用宿主机的网络(IP 和 端口))。
  • 由于主机网络会让容器直接使用主机的端口,可能会造成端口冲突。
  • 使用场景:对于某些性能要求高,或需要直接使用主机网络的场景,可以使用主机网络。

⭐ 3. 容器网络 container

  • 容器共享另一个容器的网络命名空间(指定新创建的容器和引进存在的一个容器共享一个网络)。
  • 新创建的容器不会创建自己的网卡、配置自己的 IP,而是和一个指定的容器共享 iP、端口等,两个容器只有网络方面是共享的,其他诸如文件系统、进程列表啥的还是隔离的。
  • 使用场景:多个容器之间需要紧密协作时(如主应用和辅助容器共享网络)可以使用该网络类型。

⭐ 4. 禁用网络 none

  • Docker 容器拥有自己的 Network Namespace,但并不会为容器进行任何网络配置(没有网卡、IP、路由等信息)。容器完全网络隔离,无法访问其他容器或外部网络
  • 使用场景:需要极高的安全隔离性,或完全自定义网络配置。

⭐ 5. 覆盖网络 overlay

  • 借助 Docker 集群模块(Docker Swarm)搭建的跨 Docker Daemon 网络。它将多个 Docker 守护进程连接在一起,使得集群服务能够相互通信。
  • 使用场景:当需要运行在不同 Docker 宿主机上的容器进行通信,或当多个应用程序使用集群服务协同工作时,覆盖网络是最佳选择。

image-20250617094232335

🌈 四、Docker 网络管理命令

命令别名功能
docker network create创建自定义网络
docker network inspect查看网络详情
docker network connect将容器连接到网络
docker network disconnect将容器从网络断开
docker network prune删除所有不使用的网络
docker network lsdocker network list列出网络
docker network rmdocker network remove指定删除 1 / n 个网络

⭐ 1. docker network create

  • 创建一个自定义网络,可指定驱动类型、子网、网关等。

1. 基础语法

docker network create [options] network_name
options 的可选项功能
-d 或 --driver指定网络驱动类型
--subnet自定义子网
--gateway指定网关地址
--ipv6启用 ipv6

2. 使用示例

  1. 创建一个名为 my_bridge1 的桥接网络。
docker network create --driver bridge my_bridge1

image-20250617104430853

  1. 创建一个名为 my_bridge2 的桥接网络,并将其子网设置为 192.168.10.0/24,以及网关设置为 192.168.10.1。
docker network create --subnet 192.168.10.0/24 --gateway 192.168.10.1 -d bridge my_bridge2

image-20250617104626324

⭐ 2. docker network inspect

  • 查看指定网络的详细信息(容器成员、子网、网关等)。

1. 基础语法

docker network inspect [options] network_name [network_name...]
options 的可选项功能
-f 或 --format指定信息的输出格式

2. 使用示例

  • 查看 my_bridge2 这个网络的详细信息。
docker network inspect my_bridge2

image-20250617105604652

⭐ 3. docker network connect

  • 用于将容器连接到指定网络。可以按名称或 IP 来连接容器。一旦连接,容器就可以和处于同一网络中的其他容器进行通信。

1. 基础语法

docker network connect [options] network_name container_name
options 的可选项功能
--ip指定 IP 地址
--ip6指定 IPv6 地址

2. 使用示例

  1. 将正在运行的 CoffeeCat 连接到 my_bridge1 这个网络。
docker network connect my_bridge1 CoffeeCat

image-20250617110600781

  1. 启动容器时,将容器连接到指定网络。
# 还可以使用 docker run --network=<network_name> 选项启动容器并立即将其连接到网络。
docker container run -itd --network=my_bridge1 nginx:latest

image-20250617111355280

  1. 可以指定要分配给容器网络接口的 IP 地址。
docker network connect --ip 192.168.10.224 my_bridge2 CoffeeCat

image-20250617111746923

⭐ 4. docker network disconnect

  • 用于将指定容器从指定网络中断开。

1. 基础语法

docker network disconnect [options] network_name container_name
options 的可选项功能
-f强制断开

2. 使用示例

  • 断开 CoffeeCat 容器与 my_bridge1 网络的连接。
docker network disconnect my_bridge1 CoffeeCat

⭐ 5. docker network prune

  • 删除所有不使用(无容器连接)的网路。

1. 基础语法

docker network prune [options]
options 的可选项功能
-f 或 --force跳过确认提示

2. 使用示例

docker network prune

⭐ 6. docker network ls

  • 列出所有的网络(包括默认网络和用户创建的网络)。

1. 基础语法

docker network ls [options]
options 的可选项功能
-f 或 --filter按照指定条件进行过滤
-fromat按照指定格式打印内容
--no-trunc不截断信息
-q 或 --quiet只显示网络 ID

2. 使用示例

  1. 列出所有的网络
docker network ls

image-20250617121116247

  1. 只显示网络名称中包含 bridge 的网络。
docker network ls -f name=bridge

image-20250617121028361

⭐ 7. docker network rm

  • 用于删除指定的 1 / n 个网络(前提是被删除的网络未被容器使用)。

1. 基础语法

docker network rm network_name [network_name...]

2. 使用示例

  • 删除 my_bridge2 网络。
# 将 my_bridge2 网络与 CoffeeCat 容器断开连接
docker network disconnect my_bridge2 CoffeeCat
# 删除 my_bridge2 网络
docker network rm my_bridge2

image-20250617150203628

相关文章:

  • 博图SCL中WHILE语句的使用详解及案例
  • 探索KingbaseES在线体验平台:国产数据库新体验
  • 树 与 堆:从 数 据 结 构 基 础 到 算 法 实 践 的 全 面 解 析
  • 未来的随身AI IDC--AI手机
  • nginx 和 springcloud gateway cors 跨域如何设置
  • 深入剖析Spring Cloud Gateway,自定义过滤器+断言组合成拦截器链实现Token认证
  • Arduino入门教程:7、电位器
  • Karate UI自动化测试之定位器
  • Redis使用规范
  • Redis Sentinel 非集群模式高可用部署指南
  • agentformer论文阅读
  • Vue-8-前端框架Vue之应用基础响应式数据和计算属性
  • 数据库系统概论(二十)数据库恢复技术
  • linux防火墙讲解
  • 封号零风险」策略:用亚矩阵云手机解锁Telegram的100%隐匿工作流
  • MacOS15.5 MySQL8 开启 mysql_native_password
  • python在word创建w:t元素
  • 城市生命线安全运行“一网统管”体系建设思路
  • Excel将表格文件由宽数据转为长数据的方法
  • llama_index chromadb实现RAG的简单应用
  • 做婚庆找什么网站/石家庄房价
  • 网站关键词如何做/有什么公司要做推广的
  • 中国seo网站/故事式软文范例500字
  • wordpress游览量/seo是什么?
  • 呼市城乡建设委员会的网站/优化seo招聘
  • 学做视频的网站有哪些/产品网络推广的方法