Docker链接容器、Docker网络、Compose网络 - 我们现在应该如何“链接”容器?

6
我有一个现有的应用程序,由4个运行在同一主机上的Docker容器组成。它们使用link命令链接在一起。
但是,经过一些升级,Docker的link行为已被弃用并进行了更改。我们现在面临着容器之间失去链接的问题。
因此,Docker建议使用新的Network特性来代替链接容器。但我不知道这是如何工作的。
如果两个容器在同一个网络中,它们是否自动将相同的ENV变量暴露给彼此?还是主机文件更新了正确的容器名称/ IP地址?即使在docker restart之后?
我无法在文档中找到如何在网络中找到另一个容器的位置。
另外,compose似乎具有简单的容器链接设置,并可以自动化其中一些步骤 - 定义多容器应用程序是否应该采用compose?或者说现在在生产中运行它太早了? compose还支持多主机配置吗?
在未来的某个时候,我们可能需要将其中一个容器移动到另一个主机上...
1个回答

3
如果2个容器在同一个网络中,它们是否会自动公开相同的环境变量,就像它们被链接一样? 不会,现在您必须使用容器名称作为它们的主机名。新的网络功能不知道将使用哪些端口。将其视为插入同一网络集线器的2台计算机。两者都可以通过其主机名寻址对方。
主机文件是否更新为正确的容器名称/ IP地址?即使在docker重新启动后? 是的,所有属于网络的容器的/etc/hosts文件将由docker引擎实时更新。
我在文档中看不到容器如何找到其网络中另一个容器的位置? 使用容器名称。请参见“使用网络命令”文档的连接容器部分: “连接后,容器可以使用另一个容器的IP地址或名称进行通信。”
此外,Compose似乎具有简单的容器链接设置,并且可以自动化部分内容。定义多容器应用程序是否应该使用Compose?或者现在在生产环境中运行它为时过早?
Compose通过提供--x-networking选项支持新网络功能(beta版)。当前Compose版本为1.5,您不应该在生产环境中使用它。
此外,当前实现有点不方便,因为我们必须使用完整的容器名称,其中包括项目名称+ _ +容器名称+ _1。documentation说下一个版本(当前版本为1.5)将改进这一点,以便我们无需担心项目名称来访问容器。
Compose是否也支持多主机配置?
是的,在与Swarm结合使用时,如overlay network documentation所述。

太棒了,感谢详细的回答。当我们考虑转移到多主机设置时,我将再次审查compose,但现在看来,hosts文件是前进的方法... - Matt Bryson
你如何发现容器正在暴露的端口?假设我有两个容器,A映射端口7474和B。B可以通过hosts文件找到A - http://a,但是有没有一种方法可以发现映射的端口?使用`link`,您可以检查环境变量... - Matt Bryson
网络内部没有端口转换。只有在Docker主机上发布容器端口时,端口才能不同,而仅仅暴露端口时是不行的。 - Thomasleveil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接