我有一个(主)应用程序,我决定分开几个单独的应用程序(微服务)。 每个人都有自己的回购,代码库,堆栈和docker文件。
示例:库存应用程序,由单独的微服务的集合组成:
我已经花了几个小时在网上search解决scheme,如何将这些链接在一起。 不幸的是,只有我发现的是使用docker file和docker compose教程。 他们很棒,但他们生活在单一的应用程序范围内,而不是在松散耦合的微服务范围内。 这是否可行?
我怎样才能让每个微服务与其他服务交谈,而不用硬编码IP地址和端口。
至less有两种方法可以完成: – 使用docker run ... --link ...手动方法docker run ... --link ... – docker run ... --link ... – docker run ... --link ... – 用显示应用程序链接的configuration文件docker-compose 。
无论哪种方式实际上只是使用的 – --link选项。 有一个PostgreSQL服务器的例子,在文档中有容器链接 。
有关如何使用Docker撰写文档的文档也包含链接示例。
您需要了解的是:假设您将库存服务与您的应用服务相关联,那么在启动库存服务时,您可以执行类似“ --link app 。 在清单服务容器中,您只需使用名称app即可访问应用服务。 所以curl http://app会去你的应用程序容器 – 不需要知道IP地址。 如果您的应用服务不是全球公开的,您甚至不需要使用-p选项映射其端口,因为从清单到应用服务的networking都是内部的。
如果你想分发,你需要使用一个集群解决scheme。 你可以使用docker swarm来照顾你可能面临的networking问题。 您可以将容器部署到一堆Amazon EC2计算机,并在其前面使用负载平衡器,或者使用DNS映射器。 无论哪种方式,你必须经过你的本地开发环境。
根据我的经验,您不能在部署在不同机器上的容器之间使用容器链接。
您甚至可以在撰写文件或作为命令行参数使用--link 。
在我看来,这种架构的最佳select是使用dockernetworking和dns与环境variables
你可以find很多类似架构的例子