如何用docker compose实现微服务架构?

时间:2018-02-07 12:14:30

标签: docker architecture docker-compose containers microservices

我正在开发一个Web应用程序,它需要很少的微服务,例如URL缩短,邮件程序,分析等等......这些服务中的每一个都实现为REST api,因此它们可以相互通信。这些服务中的每一个都有一个 docker-compose.yml 文件,并使用像nginx,php,mysql等容器...我希望这些工作作为一个系统。我不想将这些REST apis暴露给docker网络之外的任何人

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

1 个答案:

答案 0 :(得分:3)

  

如何组合每个服务的多个docker-compose.yml文件,以便它们协同工作?

如果选择此路径,请确保您的容器附加到相同的网络。您可以在此处找到有关此案例的信息:Networking in Compose: Use a pre-existing network

  

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

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

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

  

或者我应该将我的每个服务仅基于一个容器(ubuntu作为基础并通过Dockerfile安装php,mysql,nginx)

我不太确定,你的意思到底是什么......

  • 如果您谈到将所有这些安装到一个容器中,请不要这样做。这样你就可以回到“巨石”的方式。
  • 如果你谈到以“ubuntu”作为基础开始并继续为php,mysql,nginx等构建单独的容器,你可以做到。但我建议您更好地使用https://hub.docker.com
  • 提供的官方图片