Docker - 加入多个独立的应用程序

Docker - 加入多个独立的应用程序

我有一个 (主) 应用程序,我决定将其拆分为几个单独的应用程序 (微服务)。每个应用程序都有自己的 repo、代码库、堆栈和 docker 文件。

示例:库存应用程序,由单独的微服务集合组成:

  • API 驱动的前端应用程序
  • 用户服务,与其他所有服务对话
  • 库存服务,与应用服务对话
  • 报告服务,与库存服务对话。

我花了几个小时在网上搜索如何将它们链接在一起的解决方案。不幸的是,我唯一找到的是使用docker file和的教程docker compose。它们很棒,但它们存在于单个应用程序范围内,而不是在其之上,在松散耦合的微服务范围内。这可行吗?

如何让每个微服务与其他服务通信,而无需硬编码 IP 地址和端口。

答案1

至少有两种方法可以做到这一点: - 使用手动方法docker run ... --link ... -使用docker-compose配置文件显示应用程序如何链接。

无论哪种方式实际上都只是--link使用中的选项。文档中有一个带有容器链接的 PostgreSQL 服务器的示例

有关如何使用 Docker compose 执行此操作的文档还包括链接的例子。

您需要了解的是:假设您将库存服务链接到应用服务,您将--link app在启动库存服务时执行类似操作。从库存服务容器中,您只需使用名称即可访问应用服务app。因此curl http://app将转到您的应用容器 - 无需知道 IP 地址。如果您的应用服务不对外公开,​​您甚至不需要使用该-p选项映射其端口,因为从库存到应用服务的网络都是内部的。

答案2

如果您希望所有东西都分布式,则需要使用集群解决方案。您可以使用 docker swarm 来解决您可能遇到的网络问题。您可以将容器部署到一堆 Amazon EC2 机器上,并在它们前面使用负载均衡器,或者使用 DNS 映射器。无论哪种方式,您都必须超越本地开发环境。

根据我的经验,您不能在部署在不同机器上的容器之间使用容器链接。

答案3

--link 甚至可以在撰写文件中或作为命令行参数使用它。

我认为这种架构的最佳选择是使用docker 网络域名系统环境变量

你可以找到很多类似建筑的例子

相关内容