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

How to setup Docker for a polyglot microservice-based application?

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

这是我的本地导演架构:

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

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

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

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

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

因此您需要找到 4 个基本图像(可能 Docker 注册表中的现有图像应该适合):

  • PHP7-NGINX
  • PYTHON-FLASK-NGINX
  • MariaDB
  • D图

您可以使用 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/ .之后,您可以根据需要部署每个微服务的尽可能多的实例,从而轻松扩展(这就是为什么为每个微服务提供单独的映像更有用)。