使用 Docker Compose 的微服务:同一个容器,多个项目
Posted
技术标签:
【中文标题】使用 Docker Compose 的微服务:同一个容器,多个项目【英文标题】:Micro Services With Docker Compose: Same Container, Multiple Projects 【发布时间】:2019-02-22 00:23:38 【问题描述】:与其他一些人一样,我在使用应用程序的微服务架构和以我想要的方式使用 docker-compose
时遇到问题。
总结:
我有X
微服务项目(我们称之为project A
、project B
和project C
。每个微服务都依赖于相同的容器(我们称之为dependency D
和dependency E
。
问题:
理想情况下,项目 A
、B
和 C
将 ALL 在其 docker-compose.yml 文件中具有两个依赖项(D
和 E
);然而,这成为一个问题,因为 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 A
和 project 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 镜像