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

详细介绍docker的network

Docker 的网络(Network)功能是容器化应用程序进行通信的关键部分,Docker 提供了多种网络模式,使容器能够相互通信,或者与外部世界进行交互。


1. Docker 网络的基本概念

Docker 使用 Linux 网络命名空间(Network Namespace)虚拟网络接口 来实现容器间的网络通信。默认情况下,每个容器都有自己的网络命名空间,并且可以选择不同的网络模式。


2. Docker 网络模式(Network Modes)

Docker 主要支持以下几种网络模式:

2.1 Bridge 网络(默认模式)

  • 特点
    • 适用于 单机部署 的容器。
    • 每个容器都会被分配到 Docker 的虚拟网桥(默认 docker0)。
    • 通过 内部 IP 进行通信,可以通过 docker network create 创建自定义的 bridge 网络,并分配子网。
  • 默认桥接网络(docker0)
    • docker network ls 查看默认桥接网络。
    • docker inspect <container_id> 查看容器 IP。
  • 自定义 bridge 网络
    docker network create --driver bridge my_bridge
    docker network connect my_bridge my_container
    
  • 适用场景
    • 需要多个容器通信,例如 微服务架构,但不想暴露在外部。

2.2 Host 网络

  • 特点
    • 容器与宿主机共享网络,容器的端口映射无效(-p 参数不会生效)。
    • 适用于 低延迟、高性能的网络应用,例如 DNS、Nginx 反向代理。
  • 使用方式
    docker run --network=host nginx
    
  • 适用场景
    • 高性能需求,如 Web 服务器、DNS 解析服务。

2.3 None 网络

  • 特点
    • 容器没有网络接口,完全隔离
    • 适用于 不需要网络 的容器,例如 仅运行计算任务的容器
  • 使用方式
    docker run --network=none my_container
    
  • 适用场景
    • 安全需求较高,避免暴露在网络中。

2.4 Container 网络

  • 特点
    • 让多个容器共享同一个 网络命名空间(共享 IP)。
    • 适用于 Sidecar 模式,如 日志收集、监控代理
  • 使用方式
    docker run --network=container:<container_id> my_container
    
  • 适用场景
    • 需要与另一个容器共享网络的情况,例如 监控、日志收集、调试工具

2.5 Macvlan 网络

  • 特点
    • 让容器拥有自己的 MAC 地址,在宿主机网络中像普通设备一样。
    • 适用于 需要与物理网络交互 的场景,如 物联网设备、网络模拟
  • 创建 Macvlan 网络
    docker network create -d macvlan \
      --subnet=192.168.1.0/24 \
      --gateway=192.168.1.1 \
      -o parent=eth0 my_macvlan
    
  • 适用场景
    • 网络模拟,或者 需要与外部物理网络直接通信的容器

3. Docker 网络命令详解

3.1 查看已有网络

docker network ls

输出示例:

NETWORK ID          NAME                DRIVER              SCOPE
4f46c9b27d3d        bridge              bridge              local
3d0b66b88c3f        host                host                local
e99d0b5bc139        none                null                local

3.2 创建自定义网络

docker network create \
  --driver bridge \
  --subnet=192.168.1.0/24 \
  my_custom_network

3.3 连接容器到指定网络

docker network connect my_custom_network my_container

3.4 断开容器网络连接

docker network disconnect my_custom_network my_container

3.5 查看网络详细信息

docker network inspect bridge

3.6 删除网络

docker network rm my_custom_network

4. Docker 网络与容器间通信

4.1 同一网络中的容器通信

如果两个容器处于同一个 bridge 网络,可以直接通过 容器名访问

docker network create my_bridge
docker run -d --name web --network my_bridge nginx
docker run -d --name db --network my_bridge mysql

然后 web 容器内可以通过 db 访问数据库。


4.2 跨网络通信

如果两个容器 不在同一个 Docker 网络,它们默认不能通信,除非:

  • 使用 docker network connect 让它们加入同一个网络。
  • 开放端口,让容器暴露给外部。

5. Docker 网络高级功能

5.1 Docker Compose 网络

Docker Compose 默认会为同一个 docker-compose.yml 里的所有服务 创建一个自定义 bridge 网络,服务可以通过名称互相访问:

version: '3'
services:
  web:
    image: nginx
    networks:
      - my_network
  db:
    image: mysql
    networks:
      - my_network
networks:
  my_network:

5.2 Docker 与 Kubernetes 网络

  • 在 Kubernetes 中,Docker 网络模式通常采用 CNI(Container Network Interface) 进行管理。
  • Kubernetes Pod 内的容器共享 同一个网络命名空间(类似 --network=container:<container_id>)。
  • 常见 CNI 插件:
    • Flannel(Overlay 网络)
    • Calico(基于 BGP)
    • Cilium(eBPF)

6. 总结

网络模式适用场景
Bridge默认网络,适用于大多数 Docker 应用
Host高性能 网络应用,容器与宿主机共享网络
None完全隔离,不需要网络的场景
Container共享另一个容器的网络,Sidecar 模式
Macvlan需要直接连接物理网络,如 IoT、嵌入式设备

Docker 提供了强大的网络功能,适用于各种不同的业务场景。在生产环境中,结合 Docker ComposeKubernetes,可以构建更加复杂的网络拓扑,提升容器间的通信能力和安全性。


http://www.kler.cn/a/537310.html

相关文章:

  • 常用数据结构之String字符串
  • 蓝桥杯备赛——进制转化相关问题
  • 解释一下数据库中的事务隔离级别,在 Java 中如何通过 JDBC设置事务隔离级别?
  • Vue全流程--Vue2组件的理解第二部分
  • 足球俱乐部管理系统的设计与实现
  • linux常用基础命令 最新1
  • Flask Swagger Demo
  • 使用自定义大模型来部署Wren AI(开源的文本生成SQL方案)
  • c#中lock的经典示例
  • 计算机图形学基础WebGL引擎—粒子系统实现
  • 如何用python做一个小程序进行炒股?
  • Vue注意事项
  • Pygame介绍与游戏开发
  • 【设计模式】
  • Vue Router 底层工作原理解析
  • Github标星25K+超火的Android实战项目,Android篇_github android 和后台项目
  • 客户端与服务器端安全:两者有何不同?
  • 鼠标滚轮冒泡事件@wheel.stop
  • Git Command(待更新)
  • C# 综合运用介绍
  • base库学习
  • 绿虫光伏仿真设计软件基于Unity3D引擎的革命性突破
  • 植物大战僵尸融合版(电脑/安卓)
  • 大模型RAG优化之高可用向量数据库的“热更”难题与解决方案
  • quartus24.1版本子模块因时钟问题无法综合通过,FPGA过OOC问题复盘
  • 运行时数据区概述及线程