onbuild目录如何用于官方Rails docker镜像?

时间:2014-11-26 18:14:08

标签: ruby-on-rails docker

我一直在为我们的团队构建一个docker镜像,该团队使用的是Ruby on Rails版本,这个版本太旧而不能被official Docker image支持。在向后移植官方Rails图像的过程中,我正在查看Dockerfile中的repository used to build the official image,我不明白它们是如何组合在一起的。具体来说,如何调用onbuild目录中的Dockerfile?根目录的Dockerfile中没有显式调用。

我看过documentation for ONBUILD并找不到答案。

1 个答案:

答案 0 :(得分:5)

请注意,基本Rails Dockerfile和onbuild Dockerfile都是从同一图像开始的:ruby:2.1.5。根目录Dockerfile不会调用onbuild图像 - 它是一个单独的图像,可以更好地部署"部署就绪"比基础Rails图像。

例如,查看base Rails image。它拥有设置Rails应用程序环境的所有命令。但是,它没有任何东西可以将您的实际代码放入要运行的图像中。您需要一个以该图像开头的Dockerfile,但随后包含其他命令以放入您的代码。

现在看看Rails onbuild image。你可以将一个Dockerfile放在你的root rails目录中,只说FROM rails:onbuild。构建此图像时,它将添加您的Gemfile,运行bundle install,并添加源代码。

ONBUILD命令的真正意义在于它使您能够将图像用作基本图像,但仍然执行以前无法执行的某些命令。在Rails示例中,onbuild图片并不知道您的具体代码。但是,您可以使用onbuild图像作为基础(即FROM rails:onbuild),它将在执行您在自己的Dockerfile中列出的新命令之前运行onbuild命令。