Node.js 基于Docker和grunt的工作流自动化

Node.js 基于Docker和grunt的工作流自动化,node.js,gruntjs,vagrant,build-automation,docker,Node.js,Gruntjs,Vagrant,Build Automation,Docker,我正在寻找一个基于Docker的项目设置,它支持: 开发环境与生产环境最为匹配 面向所有开发人员的最佳工作流自动化工具 高度可移植/快速设置的开发环境,支持Linux、OSX和Windows。目前,我们使用流浪者,这似乎是最明显的选择仍然 要满足#1: 用于开发、测试、暂存和生产的相同应用程序容器(node.js+Apache) 不要仅仅为了开发而向容器中添加任何自定义工作流工具 要满足#3: 不要求开发人员为各自的环境/操作系统安装自己的开发工具(例如,让他们在主机内安装node.js、

我正在寻找一个基于Docker的项目设置,它支持:

  • 开发环境与生产环境最为匹配
  • 面向所有开发人员的最佳工作流自动化工具
  • 高度可移植/快速设置的开发环境,支持Linux、OSX和Windows。目前,我们使用流浪者,这似乎是最明显的选择仍然
  • 要满足#1:

    • 用于开发、测试、暂存和生产的相同应用程序容器(node.js+Apache)
    • 不要仅仅为了开发而向容器中添加任何自定义工作流工具
    要满足#3:

    • 不要求开发人员为各自的环境/操作系统安装自己的开发工具(例如,让他们在主机内安装node.js、npm、grunt等)
    因此,为了满足#2,我的想法是:

    • 拥有第二个“dev”容器,它与节点/apache容器共享文件,并运行所有工作流自动化
    • 运行所有grunt监视/重建/重新加载/浏览器同步等
    • 如果使用Vagrant,文件共享本质上是主机->开发容器->应用容器
    上述模型是否存在缺陷,或者是否有更好的想法


    一个潜在的缺失点是是否要避免每次在生产中执行容器的完整构建,如果是,那么如何避免。在不冒生产与其他容器不匹配的风险的情况下,我希望“打包”容器,以便在将新代码推送到生产时,应用程序服务器只需重新启动,而不是npm安装等。特别是,一旦我们推到生产,它应该不再需要从第三方服务器上提取任何东西才能运行。

    这是一个有点宽泛的问题,答案将是自以为是的,而不是以客观的论据为依据,但这里我要改变的是:

  • js很好,但我会选择nginx而不是Apache。Node.js和Nginx都是基于事件的,允许更大的吞吐量,这是Node.js的优势之一。但这可能会有所不同,例如,如果您需要某些仅适用于Apache的模块,但Nginx似乎更自然地放在节点前面

  • 你为什么想要一个单独的容器?通过不必使用开发工具来最小化生产容器


  • 我真的认为,比如说,在生产容器中放置
    grunt.js
    ,不会太重,但再次强调,您似乎试图将影响降至最低。无论如何,您也可以将代码和
    grunt-watch
    等放在一个容器中,并像这样部署。优点是您正在简化设置,缺点是您的生产构建可能会安装一些额外的lib。例如,在部署生产容器时,您可以通过将NODE_ENV设置为production来缓解此问题,这样在启动时,您的脚本将知道不加载某些开发工具。

    好的观点:Apache vs nginx。我目前使用Apache解决一个复杂的AWS弹性豆茎问题,如果使用Docker,这个问题将不适用。我想将所有“开发工作流程”工具保留在上述需求1的主容器之外。i、 e.在开发和生产过程中,使容器尽可能靠近。如果在切换到生产环境时,使用env变量突然禁用许多运行时进程,“但它在我的盒子上工作!”问题的可能性会大大增加。因此,您希望一个容器用于应用程序本身,另一个容器用于构建工具。代码路径在他们和主机操作系统之间共享,这样开发人员就可以使用自己的工具,并确保其他人的结果是一样的。我只是想让“app”容器从开发到生产尽可能类似地运行。是的,源代码来自主机操作系统,因此开发人员可以使用他们首选的IDE、git等。顺便说一句,这与在
    grunt.js
    或相关文件上保存兆字节无关。这是关于让应用服务器本身在任何地方都有相同的行为,也就是说,给定相同的源文件集,您会得到相同的行为。我不确定我是否把它带到了一个极端,但容器应该是足够的,对吗?因此,为什么不将开发工作流程工具与应用程序本身隔离开来。@rgareth这是怎么回事?我也在做同样的事情,我有2个Dockerfiles.tag(1个prod&1个dev),我的构建脚本在调用docker build命令之前将目标dockerfile复制到项目文件夹的根目录。对于prod,“已编译”(最小化…)文件已烘焙,对于Dev I使用卷,但是容器中卷的文件权限存在(有详细文档记录)问题,您有任何问题吗?我正试图找出让非root用户以足够的权限运行grunt/npm/bower以生成文件的最佳方法