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

Docker network网络管理入门教程

一、核心概念
  1. Docker 网络(Network)
    Docker 通过虚拟网络实现容器间、容器与主机间的通信。网络定义容器的 IP 地址、DNS 解析和端口映射规则。

  2. 网络驱动(Network Driver)
    Docker 支持多种网络驱动,决定网络的实现方式:

    • bridge:默认驱动,适用于单机容器间通信(类似物理交换机)。
    • host:容器直接使用主机网络,端口与主机共享。
    • overlay:跨主机容器通信(需 Swarm 或 Kubernetes 支持)。
    • none:禁用网络,容器无网络接口。
    • macvlan:为容器分配独立 MAC 地址,模拟物理设备。
  3. 默认网络
    Docker 安装后自动创建三个网络:

    • bridge:默认桥接网络。
    • host:主机网络模式。
    • none:无网络模式。
二、常用命令详解

1. 查看网络列表

docker network ls

2. 创建自定义网络

docker network create [OPTIONS] NETWORK
  • 常用选项
    • --driver:指定驱动(默认 bridge)。
    • --subnet:定义子网(如 192.168.1.0/24)。
    • --gateway:设置网关。

示例

docker network create --driver bridge --subnet 192.168.10.0/24 my_network

3. 连接容器到网络

# 启动时连接
docker run -d --name web_app --network my_network nginx# 动态连接已运行容器
docker network connect my_network existing_container

4. 断开容器与网络的连接

docker network disconnect my_network existing_container

5. 查看网络详情

docker network inspect my_network

6. 删除网络

docker network rm my_network
三、网络模式详解

1. Bridge 模式(默认)

  • 特点
    • 容器通过虚拟网桥(docker0)互联。
    • 每个容器分配独立 IP 和端口,默认无法通过容器名解析(需自定义 DNS)。
  • 使用场景:单机环境下容器间隔离通信。

2. Host 模式

  • 特点
    • 容器直接使用主机网络,端口与主机共享。
    • 性能最高,但端口冲突风险大。
  • 示例
    docker run -d --name web_host --network host nginx
    

3. Overlay 模式

  • 特点
    • 支持跨主机容器通信(需 Swarm 集群或 Kubernetes)。
    • 使用 VXLAN 封装数据包。
  • 使用场景:分布式应用、微服务架构。

4. None 模式

  • 特点:容器无网络接口,仅保留 loopback 设备。
  • 示例
    docker run -d --name no_network --network none busybox sleep 3600
    

5. Macvlan 模式

  • 特点:为容器分配独立 MAC 地址,模拟物理设备。
  • 示例
    docker network create -d macvlan --subnet 192.168.1.0/24 --gateway 192.168.1.1 -o parent=eth0 mac_net
    
四、容器间通信

1. 同一网络内的通信

  • 自动 DNS 解析:同一网络内的容器可通过容器名互相访问。
  • 示例
    # 创建网络
    docker network create my_net# 启动两个容器并连接网络
    docker run -d --name web1 --network my_net nginx
    docker run -d --name web2 --network my_net nginx# 进入 web1 容器测试
    docker exec -it web1 curl http://web2
    

2. 跨网络通信

  • 方案:通过路由或代理实现。
  • 示例:使用 nginx 反向代理:
    # 创建两个网络
    docker network create net_a
    docker network create net_b# 启动代理容器并连接两个网络
    docker run -d --name proxy --network net_a --network net_b nginx# 启动两个服务容器
    docker run -d --name app1 --network net_a httpd
    docker run -d --name app2 --network net_b httpd# 配置代理规则,将 net_a 的请求转发到 app1,net_b 的请求转发到 app2
    
五、端口映射

1. 发布容器端口到主机

docker run -d --name web -p 8080:80 nginx  # 主机8080映射到容器80

2. 随机端口映射

docker run -d --name web -P nginx  # 随机映射暴露的端口

3. 查看端口绑定

docker port web
六、最佳实践

1. 使用自定义网络代替默认 bridge

  • 默认 bridge 网络不支持自动 DNS 解析,建议创建自定义网络:
    docker network create my_app_net
    

2. 合理规划子网和 IP 范围

  • 避免与主机或物理网络冲突:
    docker network create --subnet 172.18.0.0/16 my_private_net
    

3. 隔离不同环境的网络

  • 开发、测试、生产环境使用独立网络:
    docker network create dev_net
    docker network create prod_net
    

4. 使用 Compose 管理网络

  • 通过 docker-compose.yml 定义网络:
    services:web:networks:- frontenddb:networks:- backendnetworks:frontend:backend:
    

5. 监控网络性能

  • 使用 docker stats 或第三方工具(如 ctop)监控网络流量。
七、常见问题

1. 容器无法通信

  • 原因:未连接同一网络或防火墙限制。
  • 解决
    • 检查网络连接:docker network inspect
    • 临时关闭防火墙测试:systemctl stop firewalld(CentOS)。

2. 端口冲突

  • 原因:主机端口已被占用。
  • 解决
    • 修改容器映射端口:-p 8081:80
    • 查找占用端口的进程:lsof -i :8080

3. DNS 解析失败

  • 原因:容器未连接自定义网络或 Docker DNS 配置错误。
  • 解决
    • 创建自定义网络并连接容器。
    • 检查 Docker DNS 配置(/etc/docker/daemon.json)。

4. Macvlan 无法获取 IP

  • 原因:物理网卡不支持或未启用混杂模式。
  • 解决
    • 启用混杂模式:ip link set eth0 promisc on
    • 检查网卡驱动兼容性。
八、总结
  • 核心命令docker network create/connect/disconnect/inspect
  • 网络模式:根据场景选择 bridge(默认)、host(高性能)、overlay(跨主机)。
  • 通信规则:同一网络内通过容器名解析,跨网络需路由或代理。
  • 最佳实践:自定义网络、合理规划子网、使用 Compose 管理。
http://www.dtcms.com/a/331463.html

相关文章:

  • OpenCV 在图像上绘制二维图形的类cv::plot::Plot2d
  • 心灵笔记:沟通与协作
  • 搭建纯积分商城的关键注意事项
  • MySQL中的DML(二)
  • Spring基础面试题(三)
  • rtthread - ROMFS 的使用方式
  • 【自动驾驶】自动驾驶概述 ① ( 自动驾驶 与 无人驾驶 | 自动驾驶 相关岗位 及 技能需求 )
  • 网络安全应急响应
  • Java Stream API:让业务数据处理更优雅
  • 【120页PPT】人工智能与数字化转型的业财融合(附下载方式)
  • TDengine IDMP 基本功能(6. 无问智推)
  • Web攻防-业务逻辑篇APP隐私合规资源处理违规收集拒绝服务在线检测项目工具
  • 深度剖析!体育数据 API 及电竞数据 API 在体育电竞领域的核心地位
  • java动态代理机制I(初稿)
  • 职得AI简历-免费AI简历生成工具
  • C++ 排序指南
  • 7、C 语言数组进阶知识点总结
  • 解决SQL Server连接失败:Connection refused: connect
  • 力扣(LeetCode) ——225 用队列实现栈(C语言)
  • C++中的回调函数
  • C++中的内存管理(一)
  • BitDock——让你的Windows桌面变为Mac
  • 【ai写代码】lua-判断表是否被修改
  • Mysql基本使用语句(一)
  • [激光原理与应用-271]:理论 - 波动光学 - 电磁波谱,光是一种可视化的电磁波
  • 广义矩估计随机近似中1.2和2.1的差异
  • 获取iframe中canvas画面
  • 爬虫数据存储全攻略:从 Robots 协议到文件存储
  • C++11新特性深度解析
  • Linux软件下载菜单脚本