我应该如何根据这个架构Dockerise MEAN堆栈?
我是Docker的新手。
你能看看我下面的附件吗?
计划
我想要的是能够在船上安装当前软件的一定数量的孤立docker集装箱:
- NodeJs(npm,pm2,grunt-cli等)
- MongoDB的
- 其他软件(cron,ffmpeg等)
每个隔离的容器都与应用程序代码链接到相同的卷,但是以不同的ENVvariables启动:expressJS端口,db名称等等。您find了我,对不对?
例如,我们有2个独立的容器: stack1
和stack2
。
他们两个都使用与主机上位于/ home / user / app_code /(volume mount)的应用程序代码相同的音量。
stack1
在3001端口上启动,并连接到其在/ home / user / db1(卷装载)上使用DB的mongoDB服务器,并具有位于/ home / user / storage1的多媒体专用存储
在stack2
在3002端口上启动,并连接到在/ home / user / db2(卷装载)上使用数据库的mongoDB服务器,并具有位于/ home / user / storage2的多媒体专用存储
当然stack1
和stack2
放在Nginx单容器反向代理的后面。
这个问题
实施我的计划最好的方法是什么?
据我了解,在我的情况下, docker-compose
不是合适的工具。 最后,我可以构build只有nodeJs图像和Mongo图像组成的堆栈。 但是如何处理ffmpeg和cron? 如何繁殖堆栈? 有可能把它们放在罪恶的Nginx容器之后吗?
第二种方法是采用“phusion / baseimage-docker” ,手动安装NodeJs,Mongodb,ffmpeg,将这个容器相乘并隐藏每个后面的Nginx的代理。 但是这种方法有点违背了编写Dockerfiles的最佳实践 (每个容器只运行一个进程)
还是有另一种正确的方法? 你将如何实现这个架构?
先谢谢你!
这当然不是优雅的,但你可以用docker-compose做到这一点。 你只需要创build每个服务的副本。 例如:
version: "2" services: stack1_node: ... stack1_mongo: ... stack1_software: ... stack2_node: ... stack2_mongo: ... stack2_software: ...
这是简短的答案。 较长的回答是,您所描述的内容在Kubernetes中称为“ pod
,或者在AWS ECS中称为“ task
。 它们是整体形成一个单元的集装箱组合。 新的docker“群模式”也有任务的概念,但目前只处理一个容器。 我毫不怀疑他们会在接下来的几个月内扩展它来处理你所描述的内容。 他们正在从各处窃取想法。