开发者学堂课程【Docker 快速入门:Dockerfile 案例-ONBUILD 命令案例】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/616/detail/9410
Dockerfile 案例-ONBUILD 命令案例
接下来介绍 ONBUILD,
当构建一个被继承的 dockerfile 时,注意是被继承,父镜像在被子继承后父镜像的onbulid 被触发。
现在是 dockerfile4, 输入 vim dockerfile4,可以看到有这样一个 dockerfile4。
假设在这里输入 ONEBUILD RUN,也就说如果别人继承了我,我就要被触发,因为我是父,所以在 ONEBUILD RUN 后输入echo ‘’father’’onbulid----886’’
,比方我就叫 Father。
假设有一个镜像继承了我,那么只要它运行了,我这个父镜像将会打出这句话。ONBUILD RUN echo 在构建时就会打出 father images onbulid----886 这句话。
现在 dockerfile4 已经改变了,重新输入 docker build -f/mydocker/ Dockerfile4-t myip_father
,要注意大小写。这行代码没有任何问题。
如下图所示:
接着输入 docker Images,那么可以看到这里有个 myip_ father,接下来输入cp Docker file3 Dockerfile5
,再切换另一个页面,输入 vim Dockerfile5 那么这时都没有任何问题,但关键是这里有问题,不再继承 centos,而是继承myip_father 这个镜像。
那么输入 docker images ,可以看到有 myip_father,之后在下面输入cat Dockerfile5 ,也有 myip_father。当构建 Bulid5 时,这个子类就会触发父类,那么就应该打出刚才 echo 那行代码。
输入 docker bulid-f/mydocker/Dockerfile5-t myip_son. 那么这时,这一行的构建过程将会出现什么呢?
出现了一行红色代码,执行了一个 Bulid 的触发器,ONBUILD 就是触发器,触发谁?触发 Trigger 0.Run echo ‘’father images onbuild----886’’
这一行代码,。
打印 father 镜像再构建。不用关心 step 0 这一步,这步是它继承以后自动执行,但是红的这一步是需要关心的,子类在构建的时候父类的触发器就像有个倒钩字一样会执行。
如下图所示:
现在看一个差不多的案例,这里有个红色的触发器执行了这么一行代码:Trigger 0,Run echo ‘’now,build action is ok
,那么谁被执行呢?
执行 build 是父类被执行,这一块内容切记不要搞错,这就是 on build 命令的讲解。