【问题标题】:Docker as the effective Rails development environmentDocker 作为有效的 Rails 开发环境
【发布时间】:2016-11-07 07:50:22
【问题描述】:

[更新]

不幸的是,亲爱的同事,我现在放弃了 docker。 主要因素:

  • 可怜的shared volume performance(有一些使用其他工具的解决方法,但它似乎更像是一种黑客攻击)。不过,对于那些使用 Linux 的优秀人士来说,这不是问题!
  • 我低估了一些前期工作,这是使远程运行时与编辑器/IDE 完美配合所必需的。像 linting 这样的事情假设本地运行时开箱即用,似乎最普遍的解决方案是无数的 bash 包装脚本,将执行委托给 docker 容器。

我们还聘请了两个拥有相当多 docker 经验的 DevOps 人员,如果他们提出来,如何(无痛!)在我们公司引入 docker 用于托管和开发,我将很乐意修改这个主题.


[旧帖]

随着使用本机 OSX 管理程序的新版本现已推出,我决定尝试将我所有的 Ruby/Rails/JS 开发推送到 docker 容器。通过尝试将我们拥有的一些私有 gem 和我们的单体 Rails 应用程序 docker 化,我在全新的 El Capitan 安装上玩了很多。

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

目标 - 一切正常 并且主机只安装了 iTerm、git、Sublime、SourceTree 和 Docker(如果有一些额外的依赖项(-ies ) 可能会显着改善/简化工作流程,我很乐意查看这些选项)

要求

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

问题

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

其他想法

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

如果该问题之前已发布并已明确回答,请随意投反对票。另一方面,如果这个线程能够提供指南、链接和建议以顺利完成它,我会很高兴,我很确定这几天吸引了很多开发人员。

【问题讨论】:

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


【解决方案1】:

考虑orats(自以为是的rails应用程序模板):

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

还有:

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


您的一些其他要求:

  • 我的钥匙...我应该能够重复使用我主机上的钥匙 机器

    docker-compose.ymlomit the value 中指定键。

  • 设置断点并与调试器交互

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

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

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

【讨论】:

  • 感谢您的链接,dukedave。我稍后会检查它。不过,我必须说我对它在 docker 上的表现感到相当失望,主要是因为共享卷性能(这对于将其用作开发环境至关重要)以及创建包装器以提供文本运行时的额外摩擦编辑器/IDE(支持 linting 等)
  • 确定一下,您使用的是 Mac 版原生 Docker 吗?我看到了it was released around the time of your question,所以你可能一直/仍在使用Toolbox,它使用虚拟机。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2022-09-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多