如何用docker compose实现微服务体系结构?

如何用docker compose实现微服务体系结构?,docker,architecture,docker-compose,containers,microservices,Docker,Architecture,Docker Compose,Containers,Microservices,我正在开发一个web应用程序,它只需要很少的微服务,比如URL、邮件、分析等等。。。这些服务中的每一个都实现为RESTAPI,因此它们可以相互通信。这些服务中的每一个都有一个docker-compose.yml文件,并使用nginx、php、mysql等容器。我希望这些服务可以作为一个单独的系统工作。我不想向docker网络之外的任何人公开这些RESTAPI 我的问题是如何组合来自每个服务的多个docker-compose.yml文件,以便它们一起工作?或者我应该使用一个大的docker-com

我正在开发一个web应用程序,它只需要很少的微服务,比如URL、邮件、分析等等。。。这些服务中的每一个都实现为RESTAPI,因此它们可以相互通信。这些服务中的每一个都有一个docker-compose.yml文件,并使用nginx、php、mysql等容器。我希望这些服务可以作为一个单独的系统工作。我不想向docker网络之外的任何人公开这些RESTAPI

我的问题是如何组合来自每个服务的多个docker-compose.yml文件,以便它们一起工作?或者我应该使用一个大的docker-compose.yml文件来定义一个网络下的所有服务?或者我应该将我的每个服务只基于一个容器(ubuntu作为基础,通过Dockerfile安装php、mysql、nginx),然后通过docker-compose.yml在共享网络上运行它们?还是我误解了Docker实现微服务

如何将每个服务中的多个
docker compose.yml
文件组合在一起工作

如果选择此路径,请确保容器连接到相同的网络。您可以在此处找到有关此案例的信息:

或者我应该使用一个大的
docker compose.yml
文件来定义一个网络下的所有服务吗

这再一次由你来决定这是否应该是你的方法。在这种情况下,您是正确的,所有容器都可以连接到将要创建的默认网络。来自相同的文档:

注意:应用程序的网络名称基于“项目名称”,该名称基于其所在目录的名称。您可以使用
--project name
标志或
COMPOSE\u project\u name
环境变量覆盖项目名称

或者我应该只将我的每个服务建立在一个容器上(以ubuntu为基础,通过Dockerfile安装php、mysql、nginx)

我不太清楚,你在这里到底是什么意思

  • 如果您谈论将所有这些安装到一个容器中,请不要这样做。这样,您就可以回到“整体式”方法
  • 如果你说从“ubuntu”开始,然后继续为php、mysql、nginx等构建单独的容器,你就可以做到。但是我建议你更好地使用官方提供的图片

我所说的“每个服务只在一个容器上”是指有一个带有“FROM ubuntu”的docker文件,然后是“RUN apt get install mysql server php php mcrypt…”,因此,与其为每个服务使用多个容器,不如在一个容器中安装所有依赖项。然后,我可以在同一个网络中将所有这些单一容器服务(url更短、mailer等)与docker compose文件组合在一起。这个方法不是整体的,是吗?你应该考虑容器作为过程。这意味着您不希望有一个单独的容器运行apache、mysql和php的守护进程。这在这里被描述为膨胀容器与精益容器:,幻灯片32-34。为了纠正我自己的错误,这个回答说明docker官方文档已经从说“一个过程”改为建议每个容器“一个问题”。@tgogos,你知道为什么源代码应该像本例中那样从书中分离出来,放在一个专用的容器中吗?嗨@Kwadz!我不明白他们用这种方法到底想达到什么目的,对不起:-)