在Docker容器之间进行通信 – 通用技术

我开始学习docker(一般微型服务),我已经build立了一个愚蠢的小“世界”types的应用程序(1作为一个.NET核心控制台应用程序,另一个作为一个ASP.NET核心web应用程序)在Windows上。

我的下一个里程碑就是让2个容器相互沟通,只是来回传递一些简单的信息。

常用什么技术来实现集装箱之间的通信?

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

这是一个共同的战略,还是有一个更好的docker的方式呢?

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

我在docker集线器上看到了一个用于rabbitmq窗口的图像,我听说过很好的东西 – 以前从来没有用过(我永远不能直接在Windows机器上安装它,但是用docker,我设法得到了一个工作版本在几分钟内 – 总得说,我真的很喜欢docker到目前为止)。 我接受build议。

我已经看到一些人为他们的容器提供了安静的apis,但是这似乎要复杂得多,因为你需要知道要与之通信的特定容器,并且接收容器需要以某种方式确认你是被授权的与它沟通(我想你会有一个特殊的授权容器,也许薄荷糖令牌)。

容器是在孤立的环境中运行的标准守护进程/服务。 关于使容器通信没有特别的规则。

通常情况下,您只需要将容器连接到同一个network并且它们将充当连接到同一局域网的虚拟服务器,并通过标准networking连接互相看到。

队列共享数据的使用不是一个“容器”的东西,而是一个微服务的好习惯。

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

常用什么技术来实现集装箱之间的通信?

Docker有能力创build虚拟networking。 您可以将多个容器添加到同一networking,并且每个容器可以使用其他容器的名称直接与其他容器进行通信。 容器名称将作为DNS名称,并将自动parsing同一networking中的容器。

关于队列:

队列或更一般的消息传递技术非常适合微服务。 消息传递允许asynchronous通信,这对于可伸缩性非常好。 消息传递对于请求/响应types的通信来说并不是非常合适的,其中发送者期望来自接收者的直接响应。 顾名思义,它们更适用于发送消息(想想发送电子邮件,不要阻止等待答复)

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

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

总之,如果你的通信是asynchronous的,使用rabbitmq。 否则,如果您有请求/响应通信参数,则在您的应用程序中显示restapis。

最后,无论您select什么,dockernetworking都将允许您将所有东西粘合在一起。 如果使用rabbitmq,则将其添加到networking,并将邮件发送到rabbitmq (容器名称)主机。