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

时间:2014-08-07 12:51:57

标签: node.js gruntjs vagrant build-automation docker

我正在寻找一个基于Docker的项目设置,它可以实现:

  1. 最贴近生产的开发环境
  2. 适用于所有开发人员的最佳工作流程自动化工具
  3. 高度可移植/快速设置开发环境,支持Linux,OSX和Windows。目前我们使用Vagrant,这似乎仍然是最明显的选择。
  4. 满足#1:

    • 用于开发,测试,登台和制作的相同应用容器(node.js + Apache)
    • 为了开发的目的,将任何自定义工作流工具添加到容器中

    满足#3:

    • 不要求开发人员为他们各自的环境/操作系统安装他们自己的开发工具(例如让他们在主机中安装node.js,npm,grunt等)

    然后仍然满足#2,我的想法是:

    • 有第二个“dev”容器,它与节点/ apache容器共享文件并运行所有工作流程自动化。
    • 从中运行所有grunt watch / rebuild / reload / browser-sync等。
    • 如果使用Vagrant,文件共享基本上将作为主机 - > dev container-> app容器

    上述模型中是否存在任何缺陷,或者更好的想法?

    一个潜在的缺失点是 - 是否 - 以及如果是 - 如何 - 每次都避免在生产中执行完整的容器构建。在不冒生产与其他容器不匹配的情况下,我想“打包”容器,这样当新代码推送到生产时,app服务器只需要重启,而不是npm install等。特别是,一旦我们为了运行,它不再需要从第三方服务器中提取任何东西。

1 个答案:

答案 0 :(得分:1)

这是一个有点广泛的问题,答案将以客观论点为主,而不是客观论证的支持,但这是我将在那里改变的:

  1. Node.js很好,但我会选择nginx而不是Apache。 Node.js和Nginx都是基于事件的,允许更多的吞吐量,这是Node.js的优势之一。但这可能会有所不同,比如你需要某些仅支持Apache的模块,但Nginx似乎更自然地放在Node之前。

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

  3. 我真的认为,生产容器中的grunt.js并不太重,但是,你似乎试着尽量减少影响。无论如何,或者你可以在一个容器中同时拥有代码和grunt watch等,并像这样部署。优点是您正在简化设置,缺点是您的生产版本可能会安装一些额外的库。例如,在部署生产容器时,可以通过将NODE_ENV设置为生产来缓解这一问题,以便在启动时,您的脚本将知道不加载某些开发工具。