就网络而言,桥接网络(桥接网络,也叫网桥)是一种链路层设备,用于转发网段之间的流量。桥可以是硬件设备或在主机内核中运行的软件设备。
对码头工人而言,桥接网络使用允许容器连接到同一个桥接网络来通信的软件网桥,同时提供与未连接到该桥接网络的容器的隔离.Docker桥驱动程序自动在主机中安装规则使不同桥接网络上的容器不能直接相互通信。
桥接网络用于在同一个码头工人守护进程上运行的容器通信。对于不同码头工人守护进程的容器,可以在操作系统层级管理路由或使用叠加网络来实现通信。
启动码头工人时,会自动创建默认的桥接网络,新启动的容器如果没有特别指定都会连接到这个默认桥接网络。也可以创建用户自定义的桥接网络,且用户自定义的桥接网络比默认的优先级要高。
<强> 1.1用户定义网桥提供更好的隔离和容器化应用之间的互操作性强>
连接到同一个用户自定义网桥的容器会自动互相暴露所有端口,并且不会暴露到外部。这会让容器化应用之间的通信更方便,而不会意外开放进入外部世界。
假设一个应用包含网络前端和数据库后端。外部需要访问前端(可能是80端口),但是只有前端需要访问数据库后端。使用用户自定义网桥,只需要将前端的端口暴露到外部,数据库应用不需要开启任何端口,因为web前端可以通过用户自定义网桥直接访问到。
如果在默认网桥上运行同一个应用堆栈,需要同时打开网页前端和数据库后端的端口,每次都需要使用- p或——发布标志。在意味着码头工人主机需要通过其他方式来限制对数据库后端端口的访问。
<强> 1.2用户自定义桥提供容器间自动DNS解析DNS解析(自动)强>
默认网桥上的容器只能通过IP地址互相访问,除非你使用,链接选项,这被认为是遗留的。在用户自定义网桥中,容器之间可以通过名字会别名互相访问。
这里还是用上面的例子分析,网前端和数据库后端。如果容器称为web和数据库、web容器可以连接到数据库上的db容器(web容器可以连接到数据库容器在db),不管这个应用堆栈运行在哪个码头工人主机上。
如果在默认网桥上运行相同应用堆栈,需要人工创建容器之间的连接(使用遗留的,链接)标志。这些连接需要双向创建,所以当需要通信的容器个数大于2个时复杂度会呈指数增长。或者,你可以编辑容器内的/etc/hosts文件,但这会产生难以调试的问题。
<强> 1.3容器可以在运行中与用户自定义网络连接和断开强>
在一个容器的生命周期中,可以在容器运行中将容器与用户自定义网络连接和断开。要从默认网桥中移除容器,需要停止容器并且通过不同的网络选项重新创建。
<强> 1.4每个用户自定义网络创建一个可配置的桥强>
如果你的容器使用默认网桥,你可以配置它,但是所有容器都使用了相同设置,例如MTU和iptables规则。此外,对默认网桥的配置发生在码头工人之外,需要重启码头工人。
用户自定义网桥通过码头工人网络创建来创建和配置。如果应用程序的不同分组有不同的网络需求,可以独立配置每个用户自定义网桥,就像独立创建一样。
<强> 1.5默认网桥中连接的容器共享环境变量强>
最初,在两个容器之间共享环境变量的唯一方法是使用,链接标志连接它们。用户自定义网络中无法使用这种类型的变量共享方式。然而,共享环境变量有更好的方式。一些想法:
-
<李>多个容器可以使用码头工人卷卷挂载用于共享信息的同一个文件或目录。李>
<李>可以通过docker-compose同时启动多个容器,写文件可以定义共享变量。李>
<李>可以使用群服务代替独立的容器,可以利用群体的共享的秘密和配置。李>
连接到同一个用户自定义网桥的容器可以有效地将所有端口暴露给对方。要使不同网络上的容器或非码头工人主机访问到容器的端口,该端口必须使用- p或——发布标志来发布。
通过码头工人网络创建命令创建用户自定义网桥:
码头工人美元网络创建网
可以指定子网子网、IP地址段,网关和其他选项。查看码头工人网络创建命令参考手册或通过码头工人网络创建——帮助命令查看详情。