Docker 允许您在多个 Docker 容器之间创建专用通道,从而创建一个可以共享文件和其他资源的容器网络。这称为 Docker 网络。您可以使用各种网络驱动程序创建 Docker 网络,包括桥接驱动程序、McVLAN 驱动程序等。默认情况下,如果您在创建网络时未指定驱动程序,系统将自动选择默认的桥接驱动程序。桥接驱动程序是单主机网络驱动程序,因此其范围仅限于本地。
在本文中,我们将讨论如何创建、管理和使用 Docker 桥接网络。为此,您需要一台安装有Docker的Linux主机。闲话少叙,让我们深入探讨 Docker 桥接网络。
桥接网络驱动程序
网桥网络是一个默认网络,如果创建容器时若未指定任何网络,容器将自动部署在该默认网络中。部署在同一网络中的容器可以相互通信,而不在同一网络中的容器则无法在没有适当授权的情况下相互通信。若在创建容器时未主动创建或指定网络,Docker会默认使用该桥接网络。。要列出 Docker 中的网络,您可以使用以下命令。
docker network ls
Docker 网络的类型
有三个主要的默认网络,如下所述,要了解有关 Docker 网络的更多信息,请参阅Docker 网络。
-
Bridge(默认)
-
Host
-
None
将容器连接到用户定义的桥接网络
如果容器是在默认桥接网络中创建的,则通信将仅通过容器的 IP 地址进行。使用容器名称 (hostName) 无法进行通信。要验证这一点,请进入 Java Web 应用容器,并使用容器名称和 IP 地址对 Maven Web 应用容器进行 ping 操作。使用 IP 地址进行 ping 操作时,容器可以正常工作,但无法使用容器名称进行通信。对于容器,开发人员不应基于 IP 地址编写连接代码。由于容器的 IP 地址是动态的,因此 IP 地址会不断变化。
创建自定义桥接网络
要创建自定义桥接网络,我们可以使用 docker network 命令,其语法如下:
句法
docker network create -d <driver> <networkName>
如何创建自定义桥接网络?分步指南
以下是指导您创建自定义桥接网络的步骤:
步骤 1:确保 Docker 正在运行
-
以下内容有助于检查docker运行状态:
sudo systemctl status docker
-
以下命令有助于启用 docker 服务:
sudo systemctl enable docker --now
步骤2:创建桥接网络
- 首先使用以下命令检查现有网络列表:
docker network ls
- 使用以下命令创建一个新的桥接网络:
docker network create --driver bridge mynetwork
步骤3:验证网络创建
- 使用以下命令验证网络是否创建成功:
docker network ls
步骤 4:检查桥接网络
- 使用以下命令检查创建的自定义桥接网络。
docker network inspect mynetwork
如果在自定义网桥网络中创建容器,每个容器都可以通过容器名称/容器IP地址访问其他容器。请删除在默认网桥中运行的容器,或创建其他名称的容器。
默认桥接网络
Docker 的每个安装版本都提供了一个预建的默认桥接网络,其中包含一个本地作用域的桥接驱动程序。您可以使用network ls命令进行验证。更多命令请参阅Docker – 指令。
sudo docker network ls
- Bridge Driver 始终提供单主机网络,因此范围是本地的。
在 Bridge 网络中连接 Docker 容器
请注意,我们在上一步中看到的桥接网络是 Docker 容器的默认网络。如果您未指定任何其他网络,则所有新容器都将加入此默认网络。要将 Ubuntu 容器连接到默认桥接网络,请使用此命令。
sudo docker run -dt ubuntu
检查桥梁网络
- 创建Docker 容器后,检查它是否正在运行。
sudo docker container ls
- 由于容器已经运行,我们现在可以使用网络检查命令来检查 Docker 默认桥接网络。
sudo docker network inspect bridge
- 您可以以 JSON 格式查看 Bridge 网络相关的详细信息。您还可以在 Container 对象中查看与该网络关联的 Container。
测试网络连接
要测试网络连接,请记下容器的IP 地址。在本例中,IP 地址为“172.17.0.2/16”。我们将从Docker 主机ping 此地址来检查连接性。
ping 172.17.0.2
说明主机能够ping通网络中的Docker容器。
用户定义桥和默认桥之间的区别
默认桥接网络 | 用户定义桥接网络 |
---|---|
默认桥接网络将作为部署在此网络中的容器的基本网络隔离。 | 用户定义网络将允许您创建具有更多配置策略的自定义网络。 |
部署在默认桥接网络中的容器将能够使用 IP 地址相互通信。 | 部署在自定义桥接网络中的容器将能够使用容器名称相互通信。 |
通过使用主机 IP 地址完成与主机系统的通信。 | 通过使用主机 IP 地址完成与主机系统的通信。 |
容器使用嵌入式DNS通过DNS解析与互联网通信。 | 容器使用嵌入式DNS通过DNS解析与互联网通信。 |
Docker网络主机和网桥的区别
以下是docker网络host和bridge的区别:
特征 | 主机网络 | 桥接网络 |
---|---|---|
网络隔离 | 它共享主机的网络堆栈,但不提供网络隔离 | 它提供了一个私有的内部网络,将容器与主机网络隔离 |
表现 | 由于直接使用主机网络,因此可以提供更好的网络性能 | 由于网络桥接的开销,性能略有降低 |
用例 | 适用于需要直接访问主机网络的应用程序,例如监控工具 | 它是需要隔离和受控通信的典型容器化应用程序的理想选择 |
IP 寻址 | 容器使用主机的 IP 地址和端口,导致潜在的冲突 | 容器在桥接网络内获取自己的 IP 地址,避免与主机冲突 |
Docker网桥与Overlay的区别
以下是docker网桥和overlay之间的区别:
方面 | 桥接网络 | Overlay网络 |
---|---|---|
范围 | 仅限于单个主机 | 跨越多个主机 |
用例 | 适合简单的本地容器通信 | 适用于分布式、多主机环境 |
配置 | 只需极少的配置即可轻松设置 | 需要更复杂的设置,通常涉及键值存储(如 etcd) |
表现 | 由于本地范围,它通常更快 | 由于跨主机通信开销,速度稍慢 |