Docker 网络上的用户定义桥接
在本文中,我们将讨论为什么您应该在默认桥接网络上使用用户定义的桥接网络。我们还将使用实际示例演示相同内容。
如果您对容器网络使用用户定义的桥接,则该网络中的所有容器都会自动相互公开所有必需的端口,但不会公开到外部世界。这增加了容器之间的互操作性并提供了更好的隔离。
当您使用默认桥接网络创建 Docker 容器时,只能使用 IP 地址访问彼此。但在用户定义的桥接网络的情况下,您可以使用名称或别名访问它们。
为了连接或断开 Docker 容器,您可以在用户定义的网络中轻松地随时进行操作。但在默认桥接网络的情况下,您需要停止容器并使用其他网络选项重新分配它们。如果用户定义的桥接网络中的不同应用程序组具有不同的需求,您可以轻松地配置它们。
创建桥接网络
让我们使用以下命令创建一个名为 alpine-net 的桥接网络。
sudo docker network create −−driver bridge my−alpine−net
这将返回已创建网络的网络 ID。
列出所有网络
要检查 my-alpine-net 桥接网络是否已成功创建,请列出所有网络。
sudo docker network ls
您会发现 my-alpine-net 网络已使用桥接驱动程序和本地范围创建。
检查 alpine-net
您现在可以使用以下命令检查 my-alpine-net 桥接网络。
sudo docker network inspect my−alpine−net
您会发现该网络当前不包含与其关联的任何容器。
创建容器
让我们尝试创建容器并将其与不同的网络规范相关联。
我们将在此处创建 3 个 Alpine 镜像容器。
创建一个名为“my-alpine-01”的容器,该容器要连接到默认桥接网络。
创建另一个名为“my-alpine-02”的容器,该容器要连接到 my-alpine-net 网络。
最后,创建另一个名为“my-alpine-03”的容器,该容器要连接到默认桥接网络和 my-alpine-net 网络。
sudo docker run −dit −−name my−alpine−01 alpine ash sudo docker run −dit −−name my−alpine−02 −−network my−alpine−net alpine ash sudo docker run −dit −−name alpine3 alpine ash sudo docker network connect my−alpine−net alpine3
检查网络
创建 Docker 容器并将其与网络关联后,我们现在可以检查网络。
sudo docker network inspect my−alpine−net sudo docker network inspect bridge
您会发现 my-alpine-01 和 my-alpine-03 容器与默认桥接网络相关联。此外,my-alpine-02 和 my-alpine-03 容器与 my-alpine-net 网络相关联。
观察结果
容器 my-alpine-02 和 my-alpine-03 连接到 my-alpine-net 用户定义的桥接网络。您可以转到其中任何一个容器并使用容器的名称或别名 ping 另一个容器。
容器 my-alpine-01 和 my-alpine-03 连接到默认桥接网络。如果您转到其中任何一个容器并尝试 ping 另一个容器,则需要指定 IP 地址,并且不能使用容器的名称或别名。
sudo docker attach my−alpine−03 ping −c 3 172.17.0.2
以上命令将成功。在这里,我们进入了 my-alpine-03 容器并使用其 IP 地址 ping 了 my-alpine-01 容器。
sudo docker attach my−alpine−02 ping −c 3 my−alpine−03
以上命令也将成功,因为我们在用户定义的桥接网络中并使用名称 ping 了另一个容器。但是,以下命令将引发错误。
sudo docker attach my−alpine−01 ping −c 3 my−alpine−03
此外,如果您进入 my-alpine-02 容器并尝试 ping my-alpine-01 容器,它将引发错误,因为它们位于不同的子网中。
总而言之,在本文中,我们看到了在默认桥接网络上创建用户定义的自定义桥接网络的优势。您可以通过其名称或别名访问用户定义的桥接网络中的其他容器,并且与默认桥接网络相比,它还提供了更好的互操作性。