Docker容器之间的通信 - 常用技术

时间:2017-08-26 15:30:50

标签: docker docker-container

我开始学习码头工具(以及一般的微服务),而且我已经建立了一个愚蠢的小小的'#hello world"在Windows上键入app(1作为.Net Core控制台应用程序,另一个作为ASP.NET Core Web应用程序)。

我的下一个里程碑是让2个容器相互通信,只是来回发送某种简单的信息。

通常使用哪些技术来实现容器之间的通信?

我最初的想法是为容器的传出和传入消息设置一个队列,所以它不需要关心发现和直接与另一个容器交谈。

这是一种常见的策略,还是有更好的码头工作方式?

如果队列是一个不错的选择,人们通常会使用docker(请记住它需要在Windows容器中运行并且理想地使用C#客户端)?

我已经在docker hub上看到了rabbitmq用于窗口的图像,我听到了很好的东西 - 之前从未使用它(我永远无法将它直接安装在我的Windows机器上,但是使用了docker我设法在几分钟内得到一个工作版本 - 得说我到目前为止真的很开心与docker)。我愿意接受建议。

我看到有些人建议他们的容器安静,但这似乎要复杂得多,因为你需要知道你想要与之通信的特定容器,接收容器需要以某种方式确认您已被授权与之通信(我想您可能有一个特殊的授权容器,可能会使用令牌。)

2 个答案:

答案 0 :(得分:1)

  

通常使用哪些技术来实现之间的通信   容器

Docker能够创建虚拟网络。您可以将多个容器添加到同一网络,并且每个容器可以使用另一个容器的名称直接与其他容器通信。容器名称将充当DNS名称,并将自动为同一网络中的容器解析。

  

关于队列:

队列或更常见的消息传递技术非常适合微服务。消息传递允许异步通信,这对于scalabilty非常有用。消息传递不太适合请求/响应类型的通信,其中发送方期望接收方的直接响应。顾名思义,它们更适合用于发送消息。(想想发送电子邮件,你不会阻止等待回复)

另一方面,Rest API属于同步通信类别。它们是公开API用于请求/响应通信的最流行方式。

通常,REST API比消息传递技术更容易实现。消息传递通信需要位于通信端点之间的消息传递代理(例如Rabbitmq)。

总之,如果您的通信是异步的,请使用rabbitmq。否则,如果您有请求/响应通信,请在您的应用中公开rest apis。

最后,无论您选择什么,docker网络都可以让您将所有内容粘合在一起。如果您使用rabbitmq,则将其添加到网络,并将消息发送到 rabbitmq (容器名称)主机。

答案 1 :(得分:0)

容器只不过是在隔离环境中运行的标准守护程序/服务。关于使容器通信没有特殊规则。

通常,您只想将容器连接到同一个network,它们将充当连接到同一LAN的虚拟服务器,并通过标准网络连接看到彼此。

使用队列来共享数据不是恕我直言,而是一种“容器”的东西,而是微服务的良好做法。

总而言之,您必须区分容器之间的低级网络连接和服务之间的高级逻辑数据交换。