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