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

Posted

技术标签:

【中文标题】使用 Docker Compose 的微服务:同一个容器,多个项目【英文标题】:Micro Services With Docker Compose: Same Container, Multiple Projects 【发布时间】:2019-02-22 00:23:38 【问题描述】:

与其他一些人一样,我在使用应用程序的微服务架构和以我想要的方式使用 docker-compose 时遇到问题。

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

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

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

据我所见,people are recommending that you define the container in one project and reference it 使用networks 和外部链接。虽然这可行,但它引入了对不同 docker-compose yml 文件(定义依赖项的文件!)的依赖。

我读过的另一种方法主张在它们的 docker compose 文件中隔离容器,然后在您想要构建时引用多个文件。同样,虽然这可行,但它肯定不像 docker 通常使用的那么方便。如果我无法找到解决方案,我将采用这种方法。

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


有人要求我用一些例子来澄清一下:

这是 project Aproject B 的 2 个不同的 compose 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

【问题讨论】:

你能发布一个示例 docker-compose 文件吗? 我不明白是什么问题 首先,您不能在一个主机中拥有两个同名的容器(由 docker run 或 compose 文件中的 container_name 指定)。您可以使用多个撰写文件,但 docker 不会启动容器。此外,您对项目和依赖项使用相同的名称会造成混淆。项目 A 和依赖项 A 是相同的还是不同的?正如 reco 建议的那样,您可以发布一些您正在使用的撰写文件吗? 我添加了一些示例。对于可能令人困惑的描述,我深表歉意 【参考方案1】:

有一个名为external links 的功能。来自文档:

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

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

【讨论】:

这是我在两种可能的方法中基本上收集和提到的内容。 除了暴露端口和处理外部 IP 地址之外,我看不到一种方便地连接容器的方法。我认为这是 docker-compose 的局限性,也是人们转向 Kubernetes 等更强大的东西的原因。

以上是关于使用 Docker Compose 的微服务:同一个容器,多个项目的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在同一个 Cloud Run 服务中部署两个不同的 docker 镜像

使用 Docker Compose 创建同一服务的多个容器

【每天学一点】docker-compose中的deploy

docker-compose link 导致服务不可用

docker~docker-compose和VS解决方案的关系

[云原生专题-14]:容器 - 批量定义构建运行多个微服务- docker编排工具Compose