Docker 中的网络为容器提供了相互通信的基础,同时还能与外部世界相连。每个容器启动时都会连接到某个网络,Docker 默认提供了多种网络模式以满足不同需求。你可以为容器创建自定义网络,配置 IP 地址,设置通信规则等。
一、Bridge 网络(默认模式)
bridge
是 Docker 中最常用的网络模式之一。 是一种单主机内部的虚拟网络,允许容器在同一主机上使用虚拟网络桥进行通信,而无需直接暴露到外部网络。
1.1 Bridge 网络概念
- 虚拟网络桥: Docker Bridge 网络实际上是 Linux 内核中的一种虚拟网络桥,类似于物理网络交换机。它允许同一台主机上的多个容器通过这个桥连接在一起进行通信。
- 默认桥网络: Docker 在启动时会自动创建一个名为
bridge
的默认网络。你可以将容器连接到这个默认网络,容器之间就能相互通信。 - 隔离性: 使用 Bridge 网络,容器与主机外部的网络是隔离的。只有通过端口映射(
-p
参数)才能让外部访问容器内的服务。 - 容器内部通信: 连接到同一 Bridge 网络的容器可以通过容器名或 IP 地址直接相互通信,而不需要端口映射。
1.2 使用场景
- 只在单个 Docker 主机上运行的应用。
- 需要隔离容器的网络环境,但又需要容器之间能够相互通信。
- 使用本地服务开发、测试时,容器间的通信可以通过 Bridge 网络来实现。
1.3 如何使用 Bridge 网络
通过以下命令查看 Docker 主机上的默认网络。
docker network ls
启动容器时,如果没有指定其他网络,Docker 会默认将容器连接到默认的 Bridge 网络。
docker run -d --name my_container nginx
除了默认的 bridge
网络外,你还可以创建自定义的 Bridge 网络,并在容器运行时指定使用该网络。
docker network create my_bridge_network
docker run -d --name my_container --network my_bridge_network nginx
1.4 小结
- Bridge 网络 适用于单主机环境中的容器通信,提供了基本的网络隔离和端口映射功能。
- 它通常用于开发、测试环境,或者在单个主机上运行多个容器时使用。
- 使用
docker network create
可以创建自定义的 Bridge 网络,方便管理不同容器的网络隔离和通信需求。
二、Host 网络
容器在采用host
网络模式时,将会直接与宿主机共享网络命名空间,容器不再拥有独立的网络命名空间, 这意味着容器中的应用与主机的网络配置完全一致,容器将直接使用主机的 IP 地址和端口,而不是 Docker 默认的虚拟网络。
2.1 Host 网络的特点
- 无隔离性: 与其他网络模式不同,Host 网络模式取消了容器和主机之间的网络隔离。容器中的服务直接运行在主机的网络接口上,主机的 IP 和端口就是容器的 IP 和端口。
- 性能优化: 由于容器中的网络流量不再需要通过虚拟网络桥或端口映射,因此 Host 网络在某些情况下能够提供更好的网络性能。尤其是在需要处理大量网络数据的高性能应用中,Host 网络可能更适合。
- 共享主机网络: 使用 Host 网络时,容器会直接使用主机的所有网络接口。这意味着容器中的服务将与主机上的服务共享相同的端口空间。如果容器和主机有冲突的端口(如两者都想占用同一个端口),则无法正常启动。