1、ONBUILD指令說(shuō)明
ONBUILD是一個(gè)特殊的指令按摘,它后面跟的是其它指令,比如 RUN, COPY 等纫谅,而這些指令在當(dāng)前鏡像構(gòu)建時(shí)并不會(huì)被執(zhí)行炫贤。以當(dāng)前鏡像為基礎(chǔ)鏡像,去構(gòu)建下一級(jí)鏡像的時(shí)候付秕,才會(huì)執(zhí)行ONBUILD后面的指令兰珍。
Dockerfile中的其它指令,都是為了定制當(dāng)前鏡像而準(zhǔn)備的询吴,唯有ONBUILD指令是為了幫助別人而定制自己掠河,來(lái)準(zhǔn)備的。
即:ONBUILD指令在構(gòu)建一個(gè)有繼承的Dockerfile文件時(shí)汰寓,父鏡像在被子鏡像繼承后口柳,父鏡像的ONBUILD指令被觸發(fā)(觸發(fā)指令,類(lèi)似一個(gè)觸發(fā)器)有滑。
2跃闹、演示ONBUILD指令的使用
(1)演示準(zhǔn)備
我們創(chuàng)建一個(gè)Dockerfile文件:Dockerfile_onbuild。
[root@192 mydockerfile]# pwd
/home/mydockerfile
[root@192 mydockerfile]# touch Dockerfile_onbuild
編輯Dockerfile_onbuild文件內(nèi)容如下:
FROM centos # 初始鏡像
RUN yum install -y curl # 執(zhí)行安裝curl命令
ENTRYPOINT ["curl", "-s", "http://ip.cn"] # 容器啟動(dòng)后執(zhí)行的命令
# 如果有誰(shuí)繼承了我毛好,則觸發(fā)下面命令
ONBUILD RUN echo "father---image---onbuild====886"
說(shuō)明:假設(shè)有哪一個(gè)鏡像繼承了該鏡像(父鏡像)望艺,只要哪個(gè)子鏡像build的時(shí)候,就會(huì)觸發(fā)父鏡像的ONBUILD
指令肌访。
(是不是有點(diǎn)蒙找默,繼續(xù)往下看)
使用Dockerfile_onbuild文件生成onbuild/father鏡像,如下:
[root@192 mydockerfile]# docker build -f /home/mydockerfile/Dockerfile_onbuild -t onbuild/father:1.0 .
Sending build context to Docker daemon 5.12kB
Step 1/4 : FROM centos
---> 300e315adb2f
Step 2/4 : RUN yum install -y curl
---> Running in 11cd05afe92c
CentOS Linux 8 - AppStream 2.5 MB/s | 6.3 MB 00:02
CentOS Linux 8 - BaseOS 1.0 MB/s | 2.3 MB 00:02
CentOS Linux 8 - Extras 2.3 kB/s | 9.2 kB 00:03
Package curl-7.61.1-14.el8.x86_64 is already installed.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Upgrading:
curl x86_64 7.61.1-14.el8_3.1 baseos 353 k
libcurl-minimal x86_64 7.61.1-14.el8_3.1 baseos 285 k
Transaction Summary
================================================================================
Upgrade 2 Packages
Total download size: 638 k
Downloading Packages:
(1/2): curl-7.61.1-14.el8_3.1.x86_64.rpm 546 kB/s | 353 kB 00:00
(2/2): libcurl-minimal-7.61.1-14.el8_3.1.x86_64 406 kB/s | 285 kB 00:00
--------------------------------------------------------------------------------
Total 547 kB/s | 638 kB 00:01
CentOS Linux 8 - BaseOS 1.6 MB/s | 1.6 kB 00:00
warning: /var/cache/dnf/baseos-f6a80ba95cf937f2/packages/curl-7.61.1-14.el8_3.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Upgrading : libcurl-minimal-7.61.1-14.el8_3.1.x86_64 1/4
Upgrading : curl-7.61.1-14.el8_3.1.x86_64 2/4
Cleanup : curl-7.61.1-14.el8.x86_64 3/4
Cleanup : libcurl-minimal-7.61.1-14.el8.x86_64 4/4
Running scriptlet: libcurl-minimal-7.61.1-14.el8.x86_64 4/4
Verifying : curl-7.61.1-14.el8_3.1.x86_64 1/4
Verifying : curl-7.61.1-14.el8.x86_64 2/4
Verifying : libcurl-minimal-7.61.1-14.el8_3.1.x86_64 3/4
Verifying : libcurl-minimal-7.61.1-14.el8.x86_64 4/4
Upgraded:
curl-7.61.1-14.el8_3.1.x86_64 libcurl-minimal-7.61.1-14.el8_3.1.x86_64
Complete!
Removing intermediate container 11cd05afe92c
---> c88555f994f9
Step 3/4 : ENTRYPOINT ["curl", "-s", "http://ip.cn"]
---> Running in 9d9061a8d47e
Removing intermediate container 9d9061a8d47e
---> 96a5f70b56bf
Step 4/4 : ONBUILD RUN echo "father---image---onbuild====886"
---> Running in 68ca17cc9a0b
Removing intermediate container 68ca17cc9a0b
---> 05fdd64f3e60
Successfully built 05fdd64f3e60
Successfully tagged onbuild/father:1.0
# 查看本地Docker鏡像
[root@192 mydockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
onbuild/father 1.0 05fdd64f3e60 42 seconds ago 243MB
centos latest 300e315adb2f 3 months ago 209MB
(2)開(kāi)始演示
我們?cè)賱?chuàng)建一個(gè)Dockerfile文件:Dockerfile_onbuild_son吼驶。
[root@192 mydockerfile]# pwd
/home/mydockerfile
[root@192 mydockerfile]# touch Dockerfile_onbuild_son
編輯Dockerfile_onbuild_son文件內(nèi)容如下:
# 這里要繼承上面生成的onbuild/father鏡像
# 這樣onbuild/father鏡像就成了父鏡像
# 通過(guò)該Dockerfile文件生成的鏡像就是子鏡像惩激。
FROM onbuild/father:1.0 # 注意這里一定要加TAG版本,不然無(wú)法找到該鏡像蟹演。
RUN yum install -y curl # 執(zhí)行安裝curl命令
CMD /bin/bash
使用Dockerfile_onbuild_son文件生成onbuild/son鏡像风钻,如下:
[root@192 mydockerfile]# docker build -f /home/mydockerfile/Dockerfile_onbuild_son -t onbuild/son:1.0 .
Sending build context to Docker daemon 6.144kB
Step 1/3 : FROM onbuild/father:1.0
# Executing 1 build trigger # 看這三行,就是ONBUILD指令的效果
---> Running in 0a165ca6352c # Executing 1 build trigger 執(zhí)行1個(gè)構(gòu)建觸發(fā)器
father---image---onbuild====886 # 數(shù)據(jù)了父鏡像ONBUILD指令執(zhí)行的內(nèi)容
Removing intermediate container 0a165ca6352c
---> f9313959d1ae
Step 2/3 : RUN yum install -y curl
---> Running in 0485b0d9d031
Last metadata expiration check: 0:09:32 ago on Sat Mar 20 14:46:45 2021.
Package curl-7.61.1-14.el8_3.1.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
Removing intermediate container 0485b0d9d031
---> 0718c9a2d99a
Step 3/3 : CMD /bin/bash
---> Running in e102da5c1b5e
Removing intermediate container e102da5c1b5e
---> 46ed53584363
Successfully built 46ed53584363
Successfully tagged onbuild/son:1.0
以上就是ONBUILD指令的使用方式和效果酒请。
3骡技、補(bǔ)充:crul命令解釋
curl
命令可以用來(lái)執(zhí)行下載、發(fā)送各種HTTP請(qǐng)求,指定HTTP頭部等操作布朦。如果系統(tǒng)沒(méi)有curl命令可以使用
yum install curl
命令安裝囤萤,也可以下載安裝。-
curl是將下載文件輸出到stdout(標(biāo)準(zhǔn)輸出是趴,也就是控制臺(tái)中)涛舍。
例如:
使用命令:
curl http://www.baidu.com
執(zhí)行后,
www.baidu.com
的html頁(yè)面內(nèi)容右遭,就會(huì)顯示在屏幕上了做盅。這是最簡(jiǎn)單的使用方法,用這個(gè)命令獲得了URL所指向的頁(yè)面窘哈。
同樣,如果這里的URL指向的是一個(gè)文件或者一幅圖亭敢,都可以直接下載到本地滚婉。如果下載的是HTML文檔,那么將缺省響應(yīng)頭部的信息帅刀,即HTML文檔的header让腹。要想全部顯示,請(qǐng)加參數(shù)
- i
扣溺。