【问题标题】:How to implement microservices architecture with docker compose?如何用 docker compose 实现微服务架构?
【发布时间】:2018-07-17 17:28:07
【问题描述】:

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

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

【问题讨论】:

    标签: docker architecture docker-compose containers microservices


    【解决方案1】:

    如何合并来自每个服务的多个 docker-compose.yml 文件,以便它们一起工作?

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

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

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

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

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

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

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

    【讨论】:

    • 我所说的“我的每个服务只在一个容器上”的意思是有一个带有“FROM ubuntu”的 docker 文件,然后是“RUN apt-get install mysql-server php php-mcrypt ... " 因此,与其在每个服务中使用多个容器,不如在一个容器中安装所有依赖项。然后我可以在同一个网络中将所有这些单容器服务(url 更短、邮件程序等)与 docker-compose 文件结合起来。这种方法不是单体的,是吗?
    • 您应该将容器视为进程。这意味着您不希望有一个容器运行 apache、mysql、php all-in-one 的守护进程。此处将其描述为 bloatedlean 容器:Implementing Separation of Concerns with Docker and Containers,幻灯片 32-34。
    • 为了纠正我自己,这个答案here 指出官方 docker 文档已经从说“一个进程”改为建议每个容器“一个问题”
    • @tgogos,你知道为什么源代码应该像docker-compose 书中PHP Microservices 中的这个例子那样放在一个专用容器中吗?
    • 嗨@Kwadz!我不明白他们到底想用这种方法实现什么,抱歉:-)
    猜你喜欢
    • 2017-12-26
    • 2022-01-15
    • 2017-10-11
    • 2019-07-12
    • 1970-01-01
    • 2021-10-23
    • 2018-03-23
    • 2018-07-29
    • 2019-09-04
    相关资源
    最近更新 更多