使用Docker Compose的微服务:相同的容器,多个项目

时间:2018-09-18 03:37:08

标签: docker docker-compose microservices

与其他一些人一起,我在使用应用程序的微服务体系结构并以自己想要的方式使用docker-compose时遇到问题。

摘要: 我有X个微服务项目(我们将其称为project Aproject Bproject C。每个微服务都依赖于相同的容器(我们将其称为dependency Ddependency E

问题: 理想情况下,项目ABC在docker-compose中将全部都具有两个依赖项(DE .yml文件;但是,这成为一个问题,因为docker compose将这些容器视为 duplicate 容器,而实际上,我想重用它们。这是常见的错误消息:

  

错误:对于A无法为服务A创建容器:b'冲突。的   容器“ sha”已在使用容器名称“ / A”。你必须   删除(或重命名)该容器,以便能够重用该名称。'

根据我所见,people are recommending that you define the container in one project and reference it使用networks和外部链接。尽管这可行,但它会引入对另一个docker-compose yml文件(定义依赖项的文件)的依赖项。

我读过的另一种方法主张将容器隔离在其docker组合文件中,然后在要构建时引用多个文件。同样,尽管这可行,但它肯定不像docker通常使用的那样令人惊讶地方便。如果我无法解决问题,我会采用这种方法。

非单一回购世界中的其他人(特别是微服务)是否有其他方法取得成功?


有人要求我举例说明:

这是project Aproject B的2个不同的yml文件的样子:

项目A:

version: '2'
services:
  dependencyD:
    image: dependencyD:latest
    container_name: dependencyD

  dependencyE:
    image: dependencyE:latest
    container_name: dependencyE

  projectA:
    image: projectA:latest
    container_name: projectA
    depends_on:
      - dependencyD
      - dependencyE

项目B:

version: '2'
services:
  dependencyD:
    image: dependencyD:latest
    container_name: dependencyD

  dependencyE:
    image: dependencyE:latest
    container_name: dependencyE

  projectB:
    image: projectB:latest
    container_name: projectB
    depends_on:
      - dependencyD
      - dependencyE

1 个答案:

答案 0 :(得分:1)

有一个名为external links的功能。从文档中:

  

链接到在docker-compose.yml之外甚至在Compose之外启动的容器,特别是对于提供共享或公共服务的容器。

具有多个docker-compose.yml文件对于将容器组织成有意义的组也是很常见的。也许您的方案可以使用多个YAML文件和外部链接