使用Docker构建Rails开发环境(支持多个主机环境版本)

这次的目的

在本地机器(主要是Mac)上使用多个Docker主机来运行现有的Ruby on Rails应用程序。
※这不是指启动多个Rails应用程序,而是想要拥有包含多个开发环境的情况,其中包括Rails应用程序。

基本构架

多个容器构成

    • rails app (ruby image base)

 

    • Based on docker library

 

    • But this is deprecated at 5/15/2017

 

    • database (mysql image base)

 

    KVS (redis or memcache image base)

使用Docker Compose启动并协同工作,将它们分别放入不同的容器中。

详细资料

docker-compose.yml、Dockerfile等都放在以下Github中。
Github hihats/rails-on-docker。

基本上是按照上述存储库的README中所写的步骤进行的,但在从头开始使用rails new创建阶段,我没有测试其功能。
仅仅是将“现有的Rails应用程序存储库”合并到此存储库中,然后仅验证从docker-machine create到docker-compose up -d的部分。

顺便提一下,只是在Mac && DockerToolbox上进行了操作验证(原因见后文)。

Docker适用于Mac

简要解释一下关于Docker for Mac的情况。

只需安装即可构建。
可以使用为Docker设计的轻量级虚拟环境HyperKit来搭建。
也就是说,只需启动Docker for Mac就可以立即使用docker-compose build来构建各个容器。

具体而言,Docker命令始终通过/var/tmp/docker.sock进行Unix域套接字通信。由于可以通过Socket API操作Docker引擎,因此可以直接从Mac向API发送请求并运行Docker,就像在Mac上操作Docker一样。

然而

如果这样的话,那岂不是只有一个套接字,接口也会受到限制?(实际上,指定Docker主机的方法似乎只能是 localhost)
那基本上就无法适应我同时运行和独立开发多个微服务的工作流程了。

(但)如果您想创建多个本地机器,您需要Docker Machine。Docker Machine仍可用于为高级用户或多节点实验创建和管理机器。
https://docs.docker.com/machine/get-started/#prerequisite-information

果然天气变化。
如果要启动多个,则仍然需要 Docker Machine。

目前,HyperKit 没有 docker-machine create 驱动程序,因此您将使用 virtualbox 驱动程序来创建本地机器。(请参阅 Docker Machine 驱动程序的 Oracle VirtualBox 版本)。请注意,您可以在同一系统上运行 HyperKit 和 Oracle VirtualBox。

虽然有了Hyperkit,但却还没有适用于docker machine的驱动程序。
目前情况如此,所以将来有希望吗?

总之,如果在多个环境中使用(不限于Rails),

以往我们只能使用docker-machine create –driver virtualbox ***来创建。(截止2017年4月)
未来,希望能在Docker Machine中指定Hyperkit,或者是Docker for Mac支持多个主机。请耐心等待。

幸运的是,Docker for Mac已经包含了Docker Machine,所以无需任何特别操作,可以像以前一样使用。
如果只是想方便地尝试一下在Docker中使用一个Rails应用程序,我认为使用HyperKit就足够了。仅仅可以使用docker system相关的命令已经让Docker for Mac非常方便了。

根据实际需求进行更广泛的扩展。

在定期同步的情况下,建立将npm等软件包集合和数据库数据本身作为卷的独立容器更加合理。

这次的代码是关于想要尝试在Docker中运行已经开始开发的Rails的情况。