Docker主机网络与桥接网络
Docker网络有两个类型的单主机网络 - **“host”** 和 **“bridge”** 网络。单主机网络意味着它们的影响仅限于每个主机。
对于主机网络,特定的Docker容器可以直接使用主机的网络来发送和接收数据包。对于桥接网络,需要端口映射才能进行通信。
为了更好地理解它们,让我们使用主机网络创建一个nginx容器。在创建nginx容器之前,让我们列出所有可用的网络。
sudo docker network ls
你会找到一个名为host,驱动程序名为host,作用域为local的网络。尝试使用以下命令检查该网络。
sudo docker network inspect host
你会得到一个包含网络所有详细信息的JSON列表。请注意,Containers对象最初是空的。
现在,我们将使用主机网络创建一个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容器的ports部分,你会找到列出的端口号和协议。由于我们在使用桥接网络驱动程序创建容器时没有指定端口映射,因此你将无法通过本地机器访问它。为了验证这一点,请尝试通过浏览器粘贴容器的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
我们现在已经使用桥接网络驱动程序创建了nginx02容器,并映射了端口号80。执行容器列表命令以验证。
sudo docker container ls
现在,使用以下命令找出nginx02容器的IP地址。
sudo docker inspect <container−id>
复制IP地址并将其粘贴到浏览器中。你现在可以使用浏览器访问nginx容器。检查桥接网络以验证。
sudo docker network inspect bridge
总而言之,在本文中,我们讨论了如何使用主机和桥接网络驱动程序创建nginx容器。然后我们看到了两者之间的区别。主机驱动程序自动访问eth0端口,不需要端口映射。但是,桥接网络驱动程序需要端口映射才能从外部访问它们。
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP