【问题标题】:How to setup Docker for a polyglot microservice-based application?如何为基于多语言微服务的应用程序设置 Docker?
【发布时间】:2017-06-05 01:55:04
【问题描述】:

在我的一个比平常更大的项目中工作,我正在构建一个 Web 应用程序,它将与我的几个 API 对话,每个 API 都用自己的语言编写。我使用了两个数据库,一个是 MariaDB,一个是 Dgraph(图形数据库)。

这是我的本地导演架构:

  • 服务 - 我的所有服务
    • api - 包含我所有的 API
      • auth - 包含我的用户身份验证/注册 API
        • v1 - 包含我当前(唯一)的 API 版本
      • trial - 包含我的一个名为 trial 的 API
      • 等等……
    • 应用程序 - 包含用户将与之交互的应用程序
    • daemon - 包含我将作为守护进程运行的程序
    • 工具 - 包含工具(导入数据、抓取工具等)
  • 数据库 - 包含我的两个配置(MariaDB 和 Dgraph)

因为有些组件是用 PHP7-NGINX 编写的,而另一些组件是用 PYTHON-FLASK-NGINX 编写的,我怎样才能在考虑到这一点的情况下进行正确的 Docker 设置?每个服务、api、守护进程和工具都是独立的,它们都通过自己的 REST 端点进行通信。

每个都有自己的私有 github 存储库,我希望能够获取每个并在需要时将其部署到自己的服务器上。

我是 Docker 新手,我所做的所有阅读都让我感到困惑:我应该为每个服务创建一个 docker-compose.yml 还是为整个项目创建一个?但是每个服务都是单独部署的,那么 docker-compose.yml 是怎么知道的呢?

任何指向干净解决方案的指针?我应该为每个服务创建一个容器,并在该容器中放置 NGINX、PHP 或 PYTHON 等吗?

【问题讨论】:

    标签: docker docker-compose dockerfile microservices docker-machine


    【解决方案1】:

    通常的做法是将每个独立的组件放入一个单独的容器中。一般 Docker 的想法是 1 个容器 = 1 个逻辑任务。 1 个任务不完全是 1 个进程,它只是最小的独立单元。

    所以你需要找到 4 个基本图像(可能来自 Docker 注册表的现有图像应该适合):

    • PHP7-NGINX
    • Python-FLASK-NGINX
    • MariaDB
    • Dgraph

    您可以使用https://hub.docker.com/search/ 搜索合适的图片。

    然后为每个组件创建自定义 Docker 文件(将 PHP7-NGINX 或 PYTHON-FLASK-NGINX 作为父映像)。

    您可能不需要用于数据库的自定义 Docker 文件。通常,数据库镜像只需要使用 --volume 选项将配置文件挂载到镜像中,或者传递环境参数(有关详细信息,请参阅基本镜像的描述)。

    之后,您只需编写 docker-compose.yml 并在此处定义图像的链接方式和其他参数。那看起来像 https://github.com/wodby/docker4drupal/blob/master/docker-compose.yml 。 顺便说一下,github上到处都是docker-compose.yml的好例子

    如果你打算在不同的服务器上运行服务,那么你可以创建一个 Swarm 集群,然后运行你的 docker-compose.yml:https://docs.docker.com/compose/swarm/。之后,您可以根据需要为每个微服务部署尽可能多的实例,从而轻松扩展(这就是为什么为每个微服务拥有单独的映像更有用)。

    【讨论】:

    • 但是所有的 PHP7-NGINX 服务都将在不同的服务器上运行,所以我应该创建尽可能多的 PHP7-NGINX 容器,因为我将在这些容器上运行服务,还是只使用一个?
    • @Lazhar 是的,每个容器就像您的应用程序在服务器上运行的一个实例。因此,如果您想在每台服务器上运行服务,则需要在每台服务器上运行一个容器。使用 docker swarm,您可以定义每个容器的运行位置,因此您可以有效地将容器绑定到特定的服务器/docker 主机。作为 docker swarm 的替代方案,您也可以使用 Kubernetes。
    猜你喜欢
    • 2021-10-26
    • 1970-01-01
    • 2019-07-15
    • 2011-03-17
    • 1970-01-01
    • 2018-10-17
    • 2016-11-06
    • 2017-10-22
    • 2015-08-07
    相关资源
    最近更新 更多