在Docker中运行一个生态系统

我们正在开发一个相当复杂的应用程序,它有一个与CouchDB实例对话的节点服务器,另一个与Redis实例对话的节点服务器,与其他两个节点服务器对话的第三个节点服务器以及一个Redis商店,至。

本地开发需要安装和运行CouchDB,两个redis实例和三个节点应用程序。 这确实不是问题,但我们希望开发人员能够进入项目并立即开始开发,而不会有太大的障碍。 我想创build一个Docker容器来运行所有这些东西,这样他们就可以构build并运行它,并且可以毫无困难地开始开发。

我正在阅读Docker最佳实践文档,并提到您应该每个容器只运行一个进程 – 实际上我们有六个进程。 它build议使用容器链接的依赖服务,但在这种情况下,你似乎仍然需要六个独立的docker容器/实例,必须自己运行它们,然后链接它们。 我想进一步简化。

是否有一个标准的创build一个多个Dockerfiles,所有的互相交互。 有没有简单的方法来同时链接,运行和构build它们? 这是一个好主意,还是只使用supervisor在一个容器中运行所有这些stream程会更好?

你想要的是Docker-Compose (之前的图),它允许你编排多个容器的创build和链接。 还有其他方法可以做到这一点,但Compose是获得最多关注的“官方”方式。

你可以基本上创build你想要的,并为你处理链接,所以一个简单的“docker-compose up -d”和“docker-compose stop”将是你的开发人员需要完成的大部分工作。

至于pipe理多个Dockerfiles,一旦它们被构build,你应该将它们提交给Docker Hub 。 从那里,你的docker-compose.yml可以把每个图像拖到开发者机器上。 你也可以重新使用官方仓库,而不是编写你自己的Dockerfiles,只需使用通过Compose传入的ENVvariables来定制它们即可。 例如, 官方的Redis Image甚至可以接受一个自定义的redis.conf文件,而不需要你自己定制的镜像/容器。