您的位置:首页 > 运维架构 > Docker

docker的bridge网络

2018-03-01 00:00 323 查看
在网络方面,桥网是一种链路层设备,它可以在网络段之间传输流量。 桥可以是硬件设备,也可以是在主机
内核中运行的软件设备。 就Docker而言,桥网使用的是一个软件桥,它允许连接到同一桥网的容器进行通信,同时提供与不连接到桥网的容器隔离。 Docker桥驱动程序自动地在主机上安装规则,所以不同的桥接网络上的容器不能直接通信。
桥接网络适用于运行在相同的Docker守护进程主机上的容器。 对于运行在不同的Docker守护进程主机上的容器之间的通信,您可以在OS级别管理路由,也可以使用覆盖网络。 当你开始Docker时,一个默认的桥网络(也称为
bridge
)是自动创建的,新启动的容器连接到它,除非有其他指定。 您还可以创建用户定义的自定义桥网络。 用户定义的桥接网络优于默认的桥接网络。

用户定义的桥和默认桥之间的区别

用户定义的桥在容器化的应用程序之间提供更好的隔离和互操作性

连接到相同用户定义的桥接网络的容器会自动地将所有端口暴露在一起,而对外部世界没有端口。 这使得容器应用程序可以轻松地进行通信,而不会意外地打开外部世界的访问。

假设有一个具有web前端和数据库后端的应用程序。 外部世界需要访问web前端(可能在端口80上),但只有前端本身需要访问数据库主机和端口。 使用用户定义的桥,只需要打开web端口,而数据库应用程序不需要打开任何端口,因为web前端可以通过用户定义的桥到达它。

如果您在默认的桥接网络上运行相同的应用程序堆栈,则需要使用
-p
--publish
为每个应用程序堆栈打开web端口和数据库端口。

用户定义的桥梁在容器之间提供自动DNS解析

默认桥接网络上的容器只能通过IP地址访问,除非您使用
--link
选项,它被认为是legacy。 在用户定义的桥接网络中,容器可以通过名称或别名彼此解析。

想象一下与前一个点相同的应用程序,有一个web前端和一个数据库后端。 如果您调用您的容器web和db,那么web容器可以在db上连接到db容器,不管哪个Docker主机正在运行应用程序堆栈。

如果您在默认的桥接网络上运行相同的应用程序堆栈,您需要手动创建容器之间的链接(使用legacy -link)标志。 这些链接需要在两个方向上创建,因此您可以看到,两个以上的容器需要进行通信时,这一过程变得复杂。 或者,您可以在容器中操作
/etc/hosts
文件,但是这会造成难以调试的问题。

可以将容器连接起来,并从用户定义的网络上分离

在容器的生命周期中,您可以动态地连接或断开用户定义的网络。 要从默认的桥接网络中删除一个容器,您需要停止容器并使用不同的网络选项重新创建它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Docker