docker network 详解

Docker 网络是 Docker 容器之间以及容器与外部世界通信的基础设施。Docker 提供了多种网络驱动和丰富的命令来管理容器网络。

Docker 网络类型

Docker 支持以下几种网络驱动:

  1. bridge - 默认网络驱动,适用于独立容器通信

  2. host - 移除容器与主机间的网络隔离

  3. overlay - 连接多个 Docker 守护进程,实现 swarm 服务通信

  4. macvlan - 为容器分配 MAC 地址,使其显示为物理设备

  5. none - 禁用所有网络

  6. ipvlan - 类似 macvlan 但不分配 MAC 地址

  7. 网络插件 - 集成第三方网络插件

Docker 网络常用命令

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

选项:

  • 无特殊选项

示例:

docker network ls

2. docker network create - 创建新网络

选项:

  • --driver 或 -d - 指定网络驱动 (默认: bridge)

  • --subnet - 指定子网 (如: 172.18.0.0/16)

  • --gateway - 指定网关 (如: 172.18.0.1)

  • --ip-range - 指定IP范围 (如: 172.18.1.0/24)

  • --label - 添加元数据

  • --attachable - 允许手动容器连接

  • --internal - 限制外部访问

  • --ipv6 - 启用IPv6网络

  • --scope - 设置网络范围 (swarm/local)

  • --ingress - 创建 swarm 入口网络

示例:

docker network create -d bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 my-bridge-network

3. docker network inspect - 显示网络详细信息

选项:

  • --format 或 -f - 使用 Go 模板格式化输出

  • --verbose 或 -v - 显示详细信息

示例:

docker network inspect my-bridge-network

4. docker network connect - 将容器连接到网络

选项:

  • --alias - 为容器添加网络别名

  • --ip - 指定IPv4地址

  • --ip6 - 指定IPv6地址

  • --link - 添加链接到另一个容器

  • --link-local-ip - 添加链接本地地址

示例:

docker network connect --alias db my-bridge-network my-container

5. docker network disconnect - 断开容器与网络的连接

选项:

  • --force 或 -f - 强制断开连接

示例:

docker network disconnect my-bridge-network my-container

6. docker network prune - 删除所有未使用的网络

选项:

  • --force 或 -f - 不提示确认

  • --filter - 提供过滤值 (如: 'until=24h')

示例:

docker network prune

7. docker network rm - 删除一个或多个网络

选项:

  • 无特殊选项

示例:

docker network rm network1 network2

网络驱动详解

bridge 网络

  • 默认网络驱动

  • 适用于同一Docker主机上的容器通信

  • 通过docker0网桥实现

  • 提供NAT功能使容器可以访问外部网络

host 网络

  • 容器直接使用主机网络

  • 无需端口映射

  • 性能最好但安全性最低

  • 容器网络与主机完全共享

overlay 网络

  • 用于Docker Swarm集群

  • 允许多个主机上的容器通信

  • 自动处理路由和负载均衡

  • 需要配置键值存储(如Consul, Etcd)

macvlan 网络

  • 为容器分配MAC地址

  • 使容器显示为物理网络设备

  • 需要网络设备支持混杂模式

  • 适用于需要直接暴露到物理网络的场景

none 网络

  • 容器没有网络接口

  • 只有loopback设备

  • 适用于完全隔离的网络需求

高级网络配置

自定义DNS

docker network create --dns 8.8.8.8 --dns 8.8.4.4 my-network

网络连接检查

docker network inspect --format='{{range .Containers}}{{.Name}} {{end}}' my-network

网络过滤器

docker network ls --filter driver=bridge
docker network prune --filter "until=24h"

最佳实践

  1. 生产环境避免使用默认bridge网络

  2. 为不同应用创建独立的网络

  3. 使用网络别名简化服务发现

  4. 敏感服务使用内部网络

  5. 监控网络流量和性能

  6. 定期清理未使用的网络资源

通过合理使用Docker网络功能,可以实现容器间安全高效的通信,满足各种复杂的应用场景需求。

posted @ 2025-07-01 19:29  郭慕荣  阅读(49)  评论(0)    收藏  举报