015-Dockerfile-ONBUILD

语法

ONBUILD [INSTRUCTION]

作用 & 描述

当镜像用作另一个构建的基础时,ONBUILD 指令向镜像添加将在稍后执行的触发指令。触发器将在下游构建的上下文中执行,就好像它是在下游 Dockerfile 中的 FROM 指令之后立即插入的一样。

任何构建指令都可以注册为触发器。
如果要构建将用作构建其它镜像的基础镜像,这非常有用,例如应用程序构建环境或可以使用特定于用户的配置自定义的守护程序。

例如,如果你的镜像时可重用的 Python 应用程序构建器,则需要将应哟呵功能程序源代码添加到特定的目录中,并且可能需要在此之后调用构建脚本。你现在不能只调用 ADD 和 RUN,因为你还无法访问应用程序源代码,并且每个应用程序构建都会有所不同。你可以简单地为应用程序开发人员提供一个样板 Dockerfile 来复制粘贴到它们的应用程序中,但这样做效率低,容易出错且难以更新,因为它与特定于应用程序的代码混合在一起。

解决方案是使用 ONBUILD 来注册预先指令,以便在下一个构建阶段运行。
以下是它的工作原理:

  1. 当遇到 ONBUILD 指令时,构建器会为正在构建的镜像的元数据添加触发器。该指令不会影响当前构建;
  2. 在构建结束时,所有触发器的列表都存储在镜像清单中的 OnBuild 键下。可以使用 docker inspect 命令检查它们;
  3. 稍后,可以使用 FROM 指令将镜像用作新构建的基础。作为处理 FROM 指令的一部分,下游构建器查找 ONBUILD 触发器,并按照它们注册的顺序执行它们。如果任何触发器失败,则中止 FROM 指令,这反过来导致构建失败。如果所有触发器都成功,则 FROM 指令完成,并且构建继续照常进行;
  4. 执行后,触发器将从最终镜像中清除。换句话说,它们不是由”grand-children"构建继承的。

例如,你可以添加以下内容:

[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]

注意

注意 1

警告:不允许使用 ONBUILD ONBUILD 链接 ONBUILD 指令

注意 2

警告:ONBUILD 指令可能不会触发 FROM 或 MAINTAINER 指令

猜你喜欢

转载自blog.csdn.net/dejunyang/article/details/91890876