Docker 网络:连接容器和主机
Docker 提供多种网络功能,以确保容器之间以及与主机之间能够进行通信。容器和服务无需了解其部署位置,因此具有可移植性和可扩展性。
Docker 网络
桥接网络:默认情况下,Docker 使用桥接网络进行容器通信。此虚拟专用网络隔离同一集群内的容器,但阻止不同集群中的容器之间的通信,除非应用其他配置。
覆盖网络:这允许跨不同 Docker 主机的容器之间进行通信。VXLAN 或 IPSec 等技术通常用于创建跨多个主机的虚拟网络。
容器网络接口 (CNI):CNI 是一种规范,它定义了容器运行时如何与网络插件交互。这允许您将不同的容器运行时与各种网络解决方案相结合,以获得更大的灵活性。
将容器连接到网络
启动容器时,Docker 会自动将其连接到默认桥接网络。不过,您可以为特定目的创建自定义网络。
示例:对于 MySQL 和 PHP 应用程序,可以创建一个名为 的网络
sql_php_nwt,对于 MongoDB 和 PHP,可以创建一个名为 的网络mongo_nwt。
这确保了每个网络内的容器能够高效、安全地相互通信。
用于网络和通信的 Docker 命令
以下是用于管理和检查 Docker 网络和容器的一些基本 Docker 命令:
启动具有端口映射的容器:
docker container run -p <host_port>:<docker_port> -d <image>
此命令允许您将 Docker 容器的端口暴露给主机,从而使容器的服务可供外部访问。
检查集装箱港口:
docker port <container_id>
使用此命令查找与容器相关的端口和协议。
查找容器的 IP 地址:
docker inspect <container_id>
此命令检索有关容器的详细信息,包括其 IP 地址。
显示所有 Docker 网络:
docker network ls
此命令列出 Docker 主机上所有可用的网络。
按类型过滤网络:
docker network -f driver=bridge
此命令过滤并列出具有bridge驱动程序的网络。
列出网络 ID 和驱动程序:
docker network ls --format "{{.ID}}: {{.Driver}}"
使用此命令显示所有可用网络的网络 ID 和驱动程序类型。
检查特定的 Docker 网络:
docker network inspect <network_name>
此命令提供有关特定网络的详细信息,包括连接到该网络的容器。
Docker 容器中的 DNS
Docker 容器使用 DNS 相互通信,而不是依赖 IP 地址。DNS 使容器可以使用易于记忆的主机名而不是复杂的 IP 地址,从而简化了容器通信。
Docker 通过允许容器使用容器名称或服务名称(如果使用 Docker Compose)相互通信,自动为容器提供 DNS 功能。
同一网络中的容器可以使用 Docker 的内置 DNS 服务解析彼此的名称。

