2

我是 Docker 新手。

你能看看我下面附上的方案吗?

计划

我想要的是能够拥有大量隔离的 docker 容器和当前的板载软件:

  • NodeJs(npm、pm2、grunt-cli 等)
  • 蒙古数据库
  • 其他软件(cron、ffmpeg 等)

每个隔离容器都使用应用程序代码链接到同一个卷,但以不同的 ENV 变量开始:expressJS 端口、数据库名称等。你明白了吗?

例如,我们有 2 个独立的容器:stack1stack2.

它们都使用相同的卷,应用代码位于主机的 /home/user/app_code/(卷挂载)。

内部stack1的 NodeJS 在 3001 端口上启动,并连接到它的 mongoDB 服务器,该服务器在 /home/user/db1(卷挂载)使用 DB,并在 /home/user/storage1 有其专用的多媒体存储

内部stack2的 NodeJS 在 3002 端口上启动,并连接到它的 mongoDB 服务器,该服务器在 /home/user/db2(卷挂载)使用 DB,并在 /home/user/storage2 有其专用的多媒体存储

当然stack1还有stack2放在 Nginx 单容器反向代理后面。

问题

实施我的计划的最佳方式是什么?

据我了解,docker-compose在我的情况下,它不是正确的工具。最后,我只能构建包含 nodeJs 图像和 Mongo 图像的堆栈。但是如何处理ffmpeg和cron呢?如何乘以堆栈?是否可以将它们放在单 Nginx 容器后面?

第二种方法是采取“phusion/baseimage-docker”,手动安装NodeJs、Mongodb、ffmpeg,将这个容器相乘,并将每个容器隐藏在Nginx revese代理后面。但是这种方法有点违反编写 Dockerfile 的最佳实践(每个容器只运行一个进程)

还是有其他合适的方法?你将如何实现这个架构?

先感谢您!

拱

4

1 回答 1

3

它当然不优雅,但你可以使用 docker-compose 做到这一点。您只需要创建每个服务的副本。例如:

version: "2"
services:
  stack1_node:
    ...
  stack1_mongo:
    ...
  stack1_software:
    ...
  stack2_node:
    ...
  stack2_mongo:
    ...
  stack2_software:
    ...

这是简短的答案。更长的答案是,您所描述的pod在 Kubernetes 或taskAWS ECS 中称为 a。它们是构成一个整体的容器的组合。新的 docker “swarm mode” 也有任务的概念,但它目前只处理一个容器。我毫不怀疑他们会在接下来的几个月内扩展它以处理您所描述的内容。他们应该从各处窃取想法。

于 2016-08-28T11:53:51.250 回答