【问题标题】:How should I Dockerise this MEAN stack according this architecture?我应该如何根据这个架构 Dockerise 这个 MEAN 堆栈?
【发布时间】:2017-01-04 12:44:06
【问题描述】:

我是 Docker 新手。

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

计划

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

  • NodeJs(npm、pm2、grunt-cli 等)
  • MongoDb
  • 其他软件(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 处有其专用的多媒体存储

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

问题

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

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

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

或者还有其他合适的方法吗?您将如何实现这种架构?

提前谢谢你!

【问题讨论】:

    标签: docker mean-stack docker-compose phusion


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!然后我将回到 EC2 容器的概念。老实说,我尝试了 Amazon Container Service,但没有弄清楚如何让事情发挥作用...... docker base image 概念怎么样?
    • 是的,docker 肯定没有那么成熟,但它更简单,而且您不会将自己锁定在 AWS 这样的提供商中。
    猜你喜欢
    • 2011-03-09
    • 2015-08-12
    • 2011-10-13
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2014-03-26
    • 2016-08-14
    相关资源
    最近更新 更多