docker - 我应该如何根据这个架构 Dockerise 这个 MEAN 堆栈?

标签 docker mean-stack docker-compose phusion

我是 Docker 新手。

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

计划

我想要的是能够拥有大量带有当前软件的独立 Docker 容器:

  • NodeJ(npm、pm2、grunt-cli 等)
  • MongoDb
  • 其他软件(cron、ffmpeg 等)

每个隔离容器都与应用程序代码链接到相同卷,但以不同的 ENV 变量启动:expressJS 端口、数据库名称等。您明白了,对吧?

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

它们都使用相同的卷,应用程序代码位于主机上的/home/user/app_code/(卷安装)。

stack1 内的 NodeJS 在 3001 端口上启动,并连接到其 mongoDB 服务器,该服务器使用位于/home/user/db1(卷安装)的数据库,并在/home 拥有用于多媒体的专用存储/用户/存储1

stack2 内的 NodeJS 在 3002 端口上启动,并连接到其 mongoDB 服务器,该服务器使用位于/home/user/db2(卷安装)的数据库,并在/home 拥有专用的多媒体存储/用户/存储2

当然,stack1stack2 放置在 Nginx 单容器反向代理后面。

问题

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

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

第二种方式是取"phusion/baseimage-docker" ,手动安装NodeJs,Mongodb,ffmpeg,乘以这个容器并将每个隐藏在Nginx revese代理后面。但这种方法有点违反Best practices for writing Dockerfiles (每个容器仅运行一个进程)

或者还有其他正确的方法吗?您将如何实现这个架构?

提前谢谢您!

arch

最佳答案

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

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

这就是简短的答案。更长的答案是,您所描述的在 Kubernetes 中称为 pod 或在 AWS ECS 中称为 task。它们是容器的分组,形成一个整体的单元。新的 docker“群模式”也有任务的概念,但它目前只处理一个容器。我毫不怀疑他们会在接下来的几个月内扩展它来处理你所描述的问题。他们从各地窃取创意,这是他们应该做的。

关于docker - 我应该如何根据这个架构 Dockerise 这个 MEAN 堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39190086/

相关文章:

postgresql - 如何使用 DataGrip 访问 Docker 虚拟网络后面的 PostgreSQL 实例?

docker-compose - Docker 工具箱 Windows - 无效的卷规范

docker - 无法从Docker外部访问kafka

c# - 502 Bad Gateway nginx/1.14.1 elasticbeanstalk .net 核心应用程序在 docker 上运行

docker - Docker群是否会忽略Dockerfile中的VOLUME命令?

docker - 使用来自 docker 的本地 ssh 端口转发

node.js - 反向填充 Mongoose

docker - Docker 与虚拟机有何不同?

angularjs - RESTful Crud MEAN.js 路由

node.js - 为什么我会收到异常 : login failed while trying to log in to mongodb?