gpt4 book ai didi

docker - 我应该如何根据此架构对MEAN堆栈进行Dockerise?

转载 作者:行者123 更新时间:2023-12-02 18:16:31 26 4
gpt4 key购买 nike

我是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代理后面。但是这种方法有点违反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“swarm模式”也具有任务的概念,但当前仅处理一个容器。我毫不怀疑他们会在接下来的几个月中扩展它来处理您所描述的内容。他们正从任何地方窃取想法。

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

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com