在本文中,我们将讨论为什么应该在默认桥网络上使用用户定义的桥网络。我们还将使用实际示例进行演示。
如果您使用用户定义的网桥进行容器网络连接,则该网络中的所有容器会自动将所有必需的端口公开给彼此,而不是公开给外部世界。这增加了容器之间的互操作性,并提供了更好的隔离性。
使用默认的桥接网络创建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网络。
检查高山网
您现在可以使用以下命令检查my-alpine-net网桥网络。
sudo docker network inspect my−alpine−net
您会发现该网络当前不包含任何与之关联的容器。
创建容器
让我们尝试创建容器并将它们与不同的网络规范相关联。
我们将在此处创建3个Alpine Image容器。
创建一个名为“ 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地址对my-alpine-01容器执行了ping操作。
sudo docker attach my−alpine−02 ping −c 3 my−alpine−03
上面的命令也将成功,因为我们处于用户定义的网桥网络中,并使用name ping另一个容器。但是,以下命令将引发错误。
sudo docker attach my−alpine−01 ping −c 3 my−alpine−03
另外,如果您输入my-alpine-02容器并尝试ping my-alpine-01容器,则将抛出错误,因为它们位于不同的子网中。
总之,在本文中,我们看到了在默认网桥网络上创建用户定义的自定义网桥网络的优势。您可以通过它们的名称或别名访问用户定义的桥接网络中的其他容器,并且与默认容器相比,它还提供了更好的互操作性。