如何为基于多语言微服务的应用程序设置Docker?

时间:2017-01-20 06:38:13

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

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

这是我的本地导演架构:

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

Local File Structure

因为有些组件是用PHP7-NGINX编写的,而有些组件是用PYTHON-FLASK-NGINX编写的,所以如何才能正确设置Docker?每个服务,api,守护进程和工具都是独立的,它们都通过自己的REST端点进行通信。

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

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

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

1 个答案:

答案 0 :(得分: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/。之后,您可以根据需要部署每个微服务的多个实例来轻松扩展(这就是为每个微服务分别创建单独图像的原因)。