Docker主机网络与网桥网络

可用于Docker网络的单主机网络有两种类型:“主机”“桥”网络。单主机网络意味着它们的影响对于每个单独的主机都是局部的。

在主机网络的情况下,特定的Docker容器可以直接使用主机的网络来发送和接收数据包。对于网桥网络,它需要端口映射才能进行通信。

为了更好地理解它们,让我们在主机网络的帮助下创建一个nginx容器。在创建nginx容器之前,让我们列出所有可用的网络。

sudo docker network ls

您会发现一个网络,其名称为host,驱动程序名称为host,范围为local。尝试使用以下命令检查该网络。

sudo docker network inspect host

您将获得一个json列表,其中包含有关网络的所有详细信息。请注意,容器对象最初是空的。

现在,我们将使用主机网络创建一个nginx Docker容器。

sudo docker container run −d −−network host −−name nginx01 nginx−alpine

在使用主机网络时,我们不指定端口映射,因为在Linux / unix系统上运行时,主机网络驱动程序会自动使用“ eth0”。

使用以下命令获取容器ID。

sudo docker inspect <container−id>

在浏览器内部,复制此IP地址,然后您可以验证nginx容器是否已成功运行。

要检查主机网络是否正在使用端口映射,请列出容器以获取端口的详细信息。

sudo docker container ls

您会发现nginx容器的端口列表为空。

现在,使用以下命令检查主机网络。

sudo network inspect host

您会发现现在容器的列表中包含nginx容器详细信息。这验证了Nginx容器现在正在主机网络上运行。

现在让我们使用不带端口映射的网桥驱动程序创建另一个nginx容器。

sudo docker run −d −−network bridge −−name nginx02 nginx−alpine

现在,执行docker list命令以获取容器的详细信息。

sudo docker container ls

您会发现在nginx02容器的端口部分内,您将找到一个端口号以及那里列出的协议。现在,由于在使用网桥网络驱动程序创建容器时尚未指定端口映射,因此您将无法通过本地计算机访问它。若要进行验证,请尝试通过粘贴容器的IP地址通过浏览器访问它。

sudo docker inspect <container−id>

将IP地址复制到您的浏览器,您会发现它引发了错误,因为我们没有指定端口映射。

现在,我们将停止并删除nginx02容器,并创建另一个容器,但这一次指定端口映射。

sudo docker stop nginx02

sudo docker container rm nginx02

删除nginx容器后,最好使用端口映射和网桥网络驱动程序创建另一个具有相同名称的网络。

sudo docker container run −d −−network bridge −−name nginx02 −p 80:80 nginx:alpine

现在,我们使用网桥网络驱动程序通过映射端口号80创建了nginx02容器。执行container list命令以进行验证。

sudo docker container ls

现在,使用以下命令找出nginx02容器的IP地址。

sudo docker inspect <container−id>

复制IP地址并将其粘贴到浏览器中。现在,您将能够使用浏览器访问nginx容器。检查网桥网络以验证相同

sudo docker network inspect bridge

总而言之,在本文中,我们讨论了如何使用主机和桥网络驱动程序创建nginx容器。然后,我们看到了两者之间的差异。主机驱动程序自动访问eth0端口,并且那里不需要端口映射。但是,网桥网络驱动程序需要端口映射才能从外部访问它们。