onbuild目录是如何工作的官方的Rails泊坞窗图像?

我一直在为我们的团队构build一个Docker镜像 ,该镜像使用的Ruby on Rails版本太旧,以至于官方Docker镜像不支持。 在反向移植官方Rails镜像的过程中,我正在查看用于构build正式映像的存储库中的Dockerfile ,我不明白它们是如何组合在一起的。 具体来说,如何调用onbuild目录中的Dockerfile? 在根目录的Dockerfile中没有明确的调用。

我已经阅读了ONBUILD的文档,找不到答案。

请注意,基础Rails Dockerfile和onbuild Dockerfile从相同的图像开始: ruby:2.1.5onbuild图像不被根目录Dockerfile调用 – 它是一个单独的图像,比基本的Rails图像稍微“部署就绪”。

例如,看看基地的Rails图像 。 它有所有的命令来build立一个Rails应用程序环境。 但是,它没有任何东西可以将您的实际代码放在图像中运行。 你将需要有一个Dockerfile,该图像以该图像开始,然后包含额外的命令来放入代码。

现在看看Rails onbuild的图像 。 你可以把一个Dockerfile放到只有FROM rails:onbuild根目录FROM rails:onbuild 。 当你build立这个图像时,它会添加你的Gemfile,运行bundle install ,并添加你的源代码。

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