运行 docker 中的生态系统

Run an ecosystem in docker

我们正在开发一个相当复杂的应用程序,它有一个与 CouchDB 实例对话的节点服务器,另一个与 Redis 实例对话的节点服务器,与其他两个节点服务器对话的第三个节点服务器,以及一个 Redis存储所有三个都可以与之交谈的存储空间。

本地开发需要安装和 运行ning CouchDB、两个 Redis 实例和三个节点应用程序。这确实不是问题,但我们希望开发人员能够进入该项目并立即开始开发,而没有太多进入障碍。我想创建一个 docker 容器,其中 运行 包含所有这些东西,这样他们就可以构建并 运行 它并开始开发而不会遇到任何麻烦。

我正在阅读 Docker best practices 文档,其中提到您应该 运行 每个容器只 一个 个进程——实际上我们有六个过程。它建议对依赖服务也使用容器 linking,但在这种情况下,您似乎仍然需要六个单独的 docker 容器/实例,并且必须 运行 每个容器/实例然后 link 他们。我想进一步简化它。

是否有一个标准来创建多个相互交互的 Dockerfile 的存储库。有没有一种简单的方法可以 link、运行 并同时构建它们?这是个好主意,还是仅 运行 在一个容器中使用 supervisor 所有这些进程会更好?

您想要的是 Docker-Compose(以前称为 Fig),它可以让您协调多个容器的创建和链接。还有其他方法可以做到这一点,但 Compose 是最受关注的 "official" 方法。

您基本上可以让它创建您想要的内容并为您处理链接,因此一个简单的 "docker-compose up -d" 和 "docker-compose stop" 将是您的开发人员开始工作所需的大部分内容。

至于管理多个 Dockerfile,您应该将它们提交到 Docker Hub once they are built. From there, your docker-compose.yml can pull each image down to the developer machine. You'll also likely be able to re-use official repositories instead of writing your own Dockerfiles, simply customizing them with ENV variables passed in through Compose. For example, the Official Redis Image 甚至可以接受自定义 redis.conf 文件而不需要您自己的自定义 image/container.