1.1 网络驱动 Bridge
Docker网络驱动允许容器之间以及与外部网络之间进行交互。Docker 提供了几种网络驱动,每个都有自己的特点,用于特定的使用场景。在这节课中,我们会讨论四种主要的网络驱动:bridge、host、none 和 overlay。
Bridge网络驱动 是 Docker 的默认网络驱动。它会创建一个私有的内部网络,容器可以在其中相互通信。这个网络与主机的外部网络是隔离的。
特点:
- 连接到
bridge
网络的容器可以通过 IP 地址相互通信。 - 如果未设置端口转发,外部网络无法直接访问
bridge
网络中的容器。 - 使用简单,适用于本地开发和测试场景。
使用示例:
创建容器时如果未指定网络,它会自动连接到 bridge
网络。
Terminal
docker run -d --name my_container nginx
要设置端口转发,可以使用 -p
参数。
Terminal
docker run -d -p 8080:80 --name my_container nginx
1.2 网络驱动 Host
网络驱动 host
允许容器直接使用主机机器的网络栈。也就是说,容器将与主机共享同一个IP地址,并且可以使用主机的所有网络接口。
特点:
- 使用
host
网络驱动的容器通过减少网络虚拟化的开销提高了运行速度。 - 容器可以访问与主机相同的网络接口,这可能会增加安全风险。
- 适用于需要高网络性能或特定网络配置的场景。
使用示例:
Terminal
docker run -d --network host --name my_container nginx
1.3 网络驱动 None
网络驱动 none
禁用了容器的所有网络功能。连接到 none 网络的容器没有网络接口,这完全将其与其他容器和网络隔离开来。
特点:
- 容器与所有网络完全隔离。
- 对不需要网络的容器有用,比如执行不依赖网络的任务。
使用示例:
Terminal
docker run -d --network none --name my_container busybox
1.4 网络驱动 Overlay
网络驱动overlay
用于创建一个分布式网络,这个网络可以跨越多个Docker主机。这个驱动通常在Docker Swarm或者Kubernetes中使用,以实现不同主机上的容器之间的网络交互。
特点:
- 提供不同主机之间容器的通信。
- 需要配置的集群,比如Docker Swarm。
- 允许在现有网络上创建虚拟网络,提供高级别的隔离和安全性。
使用示例:
要使用overlay
驱动,首先需要创建一个Docker Swarm集群。
1. 初始化Docker Swarm:
Terminal
docker swarm init
2. 创建overlay网络:
Terminal
docker network create -d overlay my_overlay_network
3. 启动连接到overlay
网络的容器:
Terminal
docker service create --name my_service --network my_overlay_network nginx
1.5 网络驱动对比
比较不同的网络驱动
网络驱动 | 隔离 | 性能 | 适用范围 | 特点 |
---|---|---|---|---|
bridge | 高 | 中等 | 本地网络 | 默认隔离网络 |
host | 低 | 高 | 性能优先 | 与主机共享网络栈 |
none | 完全 | 最高 | 隔离 | 完全从网络隔离 |
overlay | 高 | 高 | 分布式网络 | 支持不同主机上的容器通信 |
网络驱动的使用
-
Bridge
: 用于本地应用和测试,当容器需要彼此通信但需要从外部网络隔离时使用。 -
Host
: 适用于需要高网络性能或特殊网络配置的应用程序,在这种情况下网络隔离不是优先考虑。 -
None
: 用于完全隔离的容器,这些容器不需要网络交互。 -
Overlay
: 用于在集群中运行的分布式应用,需要确保不同主机上的容器之间通信时使用。
GO TO FULL VERSION