- 用户定义的桥接器可在容器化应用程序之间提供更好的隔离和互操作性。
连接到同一用户定义的网桥的容器会自动将所有端口相互暴露,并且不会向外界显示任何端口。这使得容器化应用程序可以轻松地相互通信,而不会意外地打开对外界的访问。
想象一下具有Web前端和数据库后端的应用程序。外部世界需要访问Web前端(可能在端口80上),但只有后端本身需要访问数据库主机和端口。使用用户定义的网桥,只需要打开Web端口,并且数据库应用程序不需要打开任何端口,因为Web前端可以通过用户定义的网桥访问它。
如果在默认网桥上运行相同的应用程序堆栈,则需要打开Web端口和数据库端口,并使用 每个的标记-p
或--publish
标记。这意味着Docker主机需要通过其他方式阻止对数据库端口的访问。
用户定义的桥接器在容器之间提供自动DNS解析。
默认网桥上的容器只能通过IP地址相互访问,除非您使用被认为是遗留的–link选项。在用户定义的桥接网络上,容器可以通过名称或别名相互解析。
想象一下与前一点相同的应用程序,具有Web前端和数据库后端。如果你打电话给你的容器web和db,Web容器可以在连接到数据库容器db,无论托管应用程序到哪个Docker主机堆栈上运行。
如果在默认桥接网络上运行相同的应用程序堆栈,则需要在容器之间手动创建链接(使用旧--link
标志)。这些链接需要在两个方向上创建,因此您可以看到这对于需要通信的两个以上容器而言变得复杂。或者,您可以操作/etc/hosts
容器中的文件,但这会产生难以调试的问题。容器可以在运行中与用户定义的网络连接和分离。
在容器的生命周期中,您可以动态地将其与用户定义的网络连接或断开连接。要从默认桥接网络中删除容器,您需要停止容器并使用不同的网络选项重新创建容器。每个用户定义的网络都会创建一个可配置的网桥。
如果容器使用默认网桥,则可以对其进行配置,但所有容器都使用相同的设置,例如MTU和iptables规则。此外,配置默认桥接网络发生在Docker本身之外,并且需要重新启动Docker。
使用创建和配置用户定义的网桥docker network create
。如果不同的应用程序组具有不同的网络要求,则可以在创建时单独配置每个用户定义的网桥。默认桥接网络上的链接容器共享环境变量。
最初,在两个容器之间共享环境变量的唯一方法是使用–link标志链接它们。用户定义的网络无法实现这种类型的变量共享。但是,有更好的方法来共享环境变量。一些想法:- 多个容器可以使用Docker卷装入包含共享信息的文件或目录。
- 可以一起启动多个容器
docker-compose
,并且compose
文件可以定义共享变量。 - 您可以使用swarm服务而不是独立容器,并利用共享机密和 配置。
- 可以一起启动多个容器
- 多个容器可以使用Docker卷装入包含共享信息的文件或目录。
连接到同一用户定义的网桥的容器有效地将所有端口相互暴露。对于可以访问不同网络上的容器或非Docker主机的端口,必须使用-p
或者--publish
标志发布该端口。
来源地址:Docker官方文档 - 使用桥接网络
青冥有晓月