【現(xiàn)學(xué)現(xiàn)忘Docker基礎(chǔ)】— 31.ONBUILD指令案例

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扣溺。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骇窍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锥余,更是在濱河造成了極大的恐慌腹纳,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驱犹,死亡現(xiàn)場(chǎng)離奇詭異嘲恍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)雄驹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)佃牛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人医舆,你說(shuō)我怎么就攤上這事俘侠。” “怎么了蔬将?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵爷速,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我娃胆,道長(zhǎng)遍希,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任里烦,我火速辦了婚禮凿蒜,結(jié)果婚禮上禁谦,老公的妹妹穿的比我還像新娘。我一直安慰自己废封,他們只是感情好州泊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著漂洋,像睡著了一般遥皂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刽漂,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天演训,我揣著相機(jī)與錄音,去河邊找鬼贝咙。 笑死样悟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的庭猩。 我是一名探鬼主播窟她,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蔼水!你這毒婦竟也來(lái)了震糖?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤趴腋,失蹤者是張志新(化名)和其女友劉穎吊说,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體于样,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疏叨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了穿剖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚤蔓。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糊余,靈堂內(nèi)的尸體忽然破棺而出秀又,到底是詐尸還是另有隱情,我是刑警寧澤贬芥,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布吐辙,位于F島的核電站,受9級(jí)特大地震影響蘸劈,放射性物質(zhì)發(fā)生泄漏昏苏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贤惯。 院中可真熱鬧洼专,春花似錦、人聲如沸孵构。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)颈墅。三九已至蜡镶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恤筛,已是汗流浹背官还。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毒坛,地道東北人妻枕。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像粘驰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子述么,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容