【发布时间】: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_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 无论如何,这会扼杀整个努力的目的。
如果该问题之前已发布并已明确回答,请随意投反对票。另一方面,如果这个线程能够提供指南、链接和建议以顺利完成它,我会很高兴,我很确定这几天吸引了很多开发人员。
【问题讨论】:
-
小更新:我正在自己搜索和解决提到的问题。一旦我处理了其中的大部分,我将发布一个解决方案。
-
你可以使用 Discourse 的 Dockerfile 作为你的基础:github.com/discourse/discourse_docker/blob/master/image/base/…
标签: ruby-on-rails macos docker development-environment