我是 Docker 新手。
你能看看我下面附上的方案吗?
计划
我想要的是能够拥有大量隔离的 docker 容器和当前的板载软件:
- NodeJs(npm、pm2、grunt-cli 等)
- 蒙古数据库
- 其他软件(cron、ffmpeg 等)
每个隔离容器都使用应用程序代码链接到同一个卷,但以不同的 ENV 变量开始:expressJS 端口、数据库名称等。你明白了吗?
例如,我们有 2 个独立的容器:stack1
和stack2
.
它们都使用相同的卷,应用代码位于主机的 /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 的最佳实践(每个容器只运行一个进程)
还是有其他合适的方法?你将如何实现这个架构?
先感谢您!