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