如何为基于多语言微服务的应用程序设置 Docker?
How to setup Docker for a polyglot microservice-based application?
我正在做一个比平常更大的项目,我正在构建一个 Web 应用程序,它将与我的几个 API 对话,每个都用自己的语言编写。我使用两个数据库,一个是 MariaDB,第二个是 Dgraph(图形数据库。)
这是我的本地导演架构:
- 服务 - 我所有的服务
- api - 包含我所有的 API
- auth - 包含我的用户 auth/signup API
- v1 - 包含我当前的(仅)API 版本
- trial - 包含我的 API 我的 trial
- 等...
- 应用程序 - 包含用户将与之交互的应用程序
- daemon - 包含我的程序运行作为守护进程
- 工具 - 包含工具(导入数据、抓取工具等)
- 数据库 - 包含我的两个配置(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/ .之后,您可以根据需要部署每个微服务的尽可能多的实例,从而轻松扩展(这就是为什么为每个微服务提供单独的映像更有用)。
我正在做一个比平常更大的项目,我正在构建一个 Web 应用程序,它将与我的几个 API 对话,每个都用自己的语言编写。我使用两个数据库,一个是 MariaDB,第二个是 Dgraph(图形数据库。)
这是我的本地导演架构:
- 服务 - 我所有的服务
- api - 包含我所有的 API
- auth - 包含我的用户 auth/signup API
- v1 - 包含我当前的(仅)API 版本
- trial - 包含我的 API 我的 trial
- 等...
- auth - 包含我的用户 auth/signup API
- 应用程序 - 包含用户将与之交互的应用程序
- daemon - 包含我的程序运行作为守护进程
- 工具 - 包含工具(导入数据、抓取工具等)
- api - 包含我所有的 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/ .之后,您可以根据需要部署每个微服务的尽可能多的实例,从而轻松扩展(这就是为什么为每个微服务提供单独的映像更有用)。