在我的一个比平常更大的项目上工作,我正在构建一个Web应用程序,它将与我的几个API交谈,每个API都用自己的语言编写。我使用两个数据库,一个是MariaDB,第二个是Dgraph(图形数据库)。
这是我的本地导演架构:
因为有些组件是用PHP7-NGINX编写的,而有些组件是用PYTHON-FLASK-NGINX编写的,所以如何才能正确设置Docker?每个服务,api,守护进程和工具都是独立的,它们都通过自己的REST端点进行通信。
每个都有自己的私有github存储库,我希望能够在需要时将每个存储库部署到自己的服务器。
我是Docker的新手,所有的阅读让我感到困惑:我应该为每个服务创建一个docker-compose.yml,还是为整个项目创建一个?但是每个服务都是单独部署的,那么docker-compose.yml如何知道呢?
任何指向干净解决方案的指针?我应该为每个服务创建一个容器,并在该容器中放置NGINX,PHP或PYTHON等吗?
答案 0 :(得分:1)
通常的做法是将每个独立组件放入一个单独的容器中。一般Docker的想法是1个容器= 1个逻辑任务。 1个任务不完全是1个过程,它只是最小的独立单元。
所以你需要找到4个基本图像(可能是Docker注册表中现有的图像应该适合):
您可以使用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/。之后,您可以根据需要部署每个微服务的多个实例来轻松扩展(这就是为每个微服务分别创建单独图像的原因)。