Docker作为有效的Rails开发环境

时间:2016-07-05 12:55:28

标签: ruby-on-rails macos docker development-environment

[更新

不幸的是,亲爱的同事们,我现在放弃了码头工作者。 主要因素:

  • shared volume performance(有一些使用其他工具的解决方法,但它似乎更像是一个黑客)。对于那些使用Linux的好人来说,这不是问题!
  • 我已经低估了一些前期工作,这需要使远程运行时与编辑器/ IDE很好地协同工作。像linting这样的东西假设一个开箱即用的本地运行时,似乎最普遍的解决方案是无数的bash包装器脚本将执行委托给docker容器。

我们还聘请了两位DevOps人员,他们拥有相当多的码头工作经验,如果他们会出现,如何(无痛地!)在我们公司引入docker进行托管和开发,我将很乐意修改这个话题

[旧帖子]

由于现在可以使用本机OSX管理程序的新版本,我决定尝试将所有Ruby / Rails / JS开发推送到docker容器。通过尝试将我们拥有的一些私人宝石和我们的巨型Rails应用程序停靠,我在新的El Capitan装置上玩了很多。

有几个问题,我希望我们的社区可以帮助解决。

目标 - 一切正常,主机只安装了iTerm,git,Sublime,SourceTree和Docker(如果有一些额外的依赖性,那就没有什么是一成不变的。 )可以改进/使工作流程更容易,我很乐意审查选项)

要求

  • 有很多服务(EngineYard,ElastiBeanstalk,Github等)要求我的密钥正常运行,我应该能够重用我主机上的那些服务。
  • 在所有Ruby应用程序容器中重用已安装的RubyGems会很不错。基本上,docker container / docker-compose文件的设置方式是它安装了GEM_PATH的同一目录,每个容器中的bundler将在那里安装gem。应用程序bundler应该负责加载正确的版本。
  • 我应该能够轻松地调试代码 - 放置断点并与调试器交互,因为它将在本地运行
  • 它应该支持TDD循环 - 我更改文件,它被容器中的guard进程捕获并执行相关测试
  • 执行Cucumber / Selenium测试时,我应该能够看到浏览器中发生了什么。 (据我所知,选项是 - 通过VNC连接到虚拟帧缓冲区或在本地运行X服务器。我更喜欢在主机端具有较少依赖性的选项。)

问题

  • 如今,对现有应用程序进行Docker化相对容易,您,好人如何处理创建/引导新项目?具有常见依赖关系的公共开发容器?
  • 是否可以按容器"持续运行的方式设置东西"或多或少像VM一样? (这可以解决我的许多要求 - 运行guard,更容易调试,在同一次运行中启动任意进程)
  • 我打算使用docker打包我们的CI应用程序。这意味着对于不同的环境,可能存在稍微不同的依赖关系,安装的卷也会有所不同(可能CI的容器不会有这些容器)。它应该在docker-compose.yml(卷)中作为不同的配置解决,还是在从基础文件继承的不同docker文件中定义?

其他想法

我也很好地尝试商业或非商业工具,包装/捆绑所描述的工具。到目前为止,我发现了一个名为http://wercker.com)的东西,我不喜欢它,它似乎需要你设置dev env,这会破坏整个努力的目的

如果之前发布过并明确回答,请随意向下投票。另一方面,如果这个帖子会产生指南,链接,建议顺利完成,我会很高兴,我很确定这些日子里有很多开发人员。

2 个答案:

答案 0 :(得分:3)

考虑orats(固定意见的rails应用程序模板):

  

目标是为您提供一个出色的基础应用程序,您可以在下一个Rails项目中使用它。

  

它也恰好使用Docker,因此您的应用程序可以在任何主要平台上运行 - 即使不需要安装Ruby。

满足您的其他一些要求:

  •   

    我的密钥......我应该可以重复使用我主机上的密钥   机

    docker-compose.ymlomit the value

  • 中指定密钥
  •   

    放置断点并与调试器进行交互

    启动服务时,请使用docker-compose up而不是docker-compose run --service-ports。这将允许例如binding.pry工作。

  •   

    执行Cucumber / Selenium测试时,我应该能够看到浏览器中发生了什么。

    这很棘手。有关解决方法,请考虑使用save_screenshot和(重要部分)将其保存到mounted to a volume on the Docker host的目录中。在主机上打开该目录,您将能够看到更新的屏幕截图。

答案 1 :(得分:0)

关于使用docker进行开发的一些注意事项:

  • 在docker中运行bash命令,并在VM中运行link
  • 使用主机映射容器的端口并使用浏览器link
  • 地图文件link
  • .env设置变量的技术允许在任何环境中使用docker,包括CI link
  • bash脚本和容器命名可以帮助自动执行任务link