如何将容器连接到自定义 Docker 网络

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Docker 是用于将应用程序容器化的强大工具,但管理容器之间的网络连接可能是一项挑战。在本教程中,你将学习如何创建自定义 Docker 网络并将容器连接到该网络,从而使它们能够安全、高效地通信。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/run -.-> lab-411521{{"如何将容器连接到自定义 Docker 网络"}} docker/ls -.-> lab-411521{{"如何将容器连接到自定义 Docker 网络"}} docker/ps -.-> lab-411521{{"如何将容器连接到自定义 Docker 网络"}} docker/create -.-> lab-411521{{"如何将容器连接到自定义 Docker 网络"}} docker/network -.-> lab-411521{{"如何将容器连接到自定义 Docker 网络"}} end

Docker 网络简介

Docker 网络是 Docker 生态系统的关键组成部分,它允许容器相互之间以及与外部世界进行通信。在 Docker 环境中,网络是一种虚拟网络,使容器能够连接并交换数据。Docker 提供了几种内置的网络驱动程序,每种驱动程序都有其独特的功能集和用例。

最常用的 Docker 网络驱动程序有:

  1. 桥接网络(Bridge Network):Docker 中的默认网络驱动程序,它在主机上创建一个虚拟网桥,允许容器相互之间以及与主机进行通信。
  2. 主机网络(Host Network):此网络模式允许容器使用主机的网络栈,有效地消除容器与主机之间的网络隔离。
  3. 覆盖网络(Overlay Network):此网络驱动程序用于多主机网络,允许在不同 Docker 主机上运行的容器相互通信。
  4. Macvlan 网络:此网络驱动程序允许你为容器分配一个 MAC 地址,使其在网络上看起来像一个物理设备。

了解这些网络驱动程序及其用例对于在 Docker 环境中有效地管理和连接容器至关重要。

graph LR A[Docker 主机] --> B[桥接网络] B --> C[容器 1] B --> D[容器 2] B --> E[容器 3]

表 1:常见的 Docker 网络驱动程序

驱动程序 描述
桥接 默认网络驱动程序,在主机上创建一个虚拟网桥。
主机 允许容器使用主机的网络栈,消除网络隔离。
覆盖 启用多主机网络,允许不同 Docker 主机上的容器进行通信。
Macvlan 为容器分配一个 MAC 地址,使其在网络上看起来像一个物理设备。

通过了解不同的网络驱动程序及其用例,你可以在 Docker 环境中有效地连接和管理容器。

创建自定义 Docker 网络

除了 Docker 提供的默认网络驱动程序外,你还可以创建自己的自定义 Docker 网络,以满足特定需求。创建自定义网络可让你对网络配置以及容器之间的隔离有更多控制权。

创建自定义桥接网络

要创建自定义桥接网络,可使用 docker network create 命令。以下是一个示例:

docker network create my-custom-network

此命令创建一个名为 my-custom-network 的新桥接网络。然后,你可以使用 docker network inspect 命令检查该网络:

docker network inspect my-custom-network

输出将提供有关网络的详细信息,例如子网、网关以及连接到该网络的容器列表。

配置自定义桥接网络

创建自定义桥接网络时,还可以指定其他配置选项,例如子网和网关。以下是一个示例:

docker network create --subnet 172.18.0.0/16 --gateway 172.18.0.1 my-custom-network

此命令创建一个子网为 172.18.0.0/16 且网关为 172.18.0.1 的自定义桥接网络。

将容器连接到自定义网络

创建自定义网络后,启动新容器时可以使用 --network 选项将容器连接到该网络。以下是一个示例:

docker run -d --name my-app --network my-custom-network nginx

此命令启动一个新的 Nginx 容器,并将其连接到 my-custom-network 自定义网络。

通过创建和使用自定义 Docker 网络,你可以提高容器的隔离性和安全性,并简化与网络相关任务的管理。

将容器连接到自定义网络

既然你已经创建了自定义 Docker 网络,那么让我们来探讨如何将容器连接到该网络。

创建容器时进行连接

启动新容器时,可以使用 --network 选项指定要连接到的网络。以下是一个示例:

docker run -d --name my-app --network my-custom-network nginx

此命令启动一个新的 Nginx 容器,并将其连接到 my-custom-network 自定义网络。

连接现有容器

你还可以使用 docker network connect 命令将现有容器连接到自定义网络。以下是一个示例:

docker run -d --name my-db mysql
docker network connect my-custom-network my-db

此命令首先启动一个新的 MySQL 容器,然后将 my-db 容器连接到 my-custom-network 自定义网络。

验证容器连接性

要验证容器是否已连接到自定义网络,可以使用 docker network inspect 命令:

docker network inspect my-custom-network

输出将显示连接到该网络的容器列表,以及它们在自定义网络中的 IP 地址。

你还可以通过使用自定义网络中的容器名称或 IP 地址来测试容器之间的连接性。例如,你可以从一个容器 ping 另一个容器:

docker exec my-app ping my-db

此命令将使用容器名称作为主机名,从 my-app 容器 ping my-db 容器。

通过将容器连接到自定义 Docker 网络,你可以提高应用程序的隔离性和安全性,并简化与网络相关任务的管理。

总结

在本教程结束时,你将对如何创建自定义 Docker 网络并将容器连接到该网络有扎实的理解。这些知识将帮助你构建更健壮、可扩展的基于 Docker 的应用程序,在这些应用程序中,容器可以轻松地相互通信以及与外部服务通信。