<menuitem id="dtdv5"><dl id="dtdv5"><address id="dtdv5"></address></dl></menuitem>
<cite id="dtdv5"><span id="dtdv5"></span></cite>
<del id="dtdv5"><noframes id="dtdv5"><del id="dtdv5"></del>
<ins id="dtdv5"></ins><ins id="dtdv5"></ins>
<ins id="dtdv5"></ins>
<var id="dtdv5"><span id="dtdv5"></span></var>
<del id="dtdv5"><noframes id="dtdv5"><ins id="dtdv5"></ins><del id="dtdv5"></del>
<del id="dtdv5"><noframes id="dtdv5"><ins id="dtdv5"></ins>

1、ONBUILD指令說明

ONBUILD是一個特殊的指令,它后面跟的是其它指令,比如 RUN, COPY 等,而這些指令在當前鏡像構建時并不會被執行。以當前鏡像為基礎鏡像,去構建下一級鏡像的時候,才會執行ONBUILD后面的指令。

Dockerfile中的其它指令,都是為了定制當前鏡像而準備的,唯有ONBUILD指令是為了幫助別人而定制自己,來準備的。

2、演示ONBUILD指令的使用

(1)演示準備

我們創建一個Dockerfile文件:Dockerfile_onbuild。

[root@192 mydockerfile]# pwd
/home/mydockerfile
[root@192 mydockerfile]# touch Dockerfile_onbuild

編輯Dockerfile_onbuild文件內容如下:

FROM centos  # 初始鏡像
RUN yum install -y curl  # 執行安裝curl命令
ENTRYPOINT ["curl", "-s", "http://ip.cn"] # 容器啟動后執行的命令

# 如果有誰繼承了我,則觸發下面命令
ONBUILD RUN echo "father---image---onbuild====886"

說明:假設有哪一個鏡像繼承了該鏡像(父鏡像),只要哪個子鏡像build的時候,就會觸發父鏡像的ONBUILD指令。

(是不是有點蒙,繼續往下看)

使用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)開始演示

我們再創建一個Dockerfile文件:Dockerfile_onbuild_son。

[root@192 mydockerfile]# pwd
/home/mydockerfile
[root@192 mydockerfile]# touch Dockerfile_onbuild_son

編輯Dockerfile_onbuild_son文件內容如下:

# 這里要繼承上面生成的onbuild/father鏡像
# 這樣onbuild/father鏡像就成了父鏡像
# 通過該Dockerfile文件生成的鏡像就是子鏡像。
FROM onbuild/father:1.0  # 注意這里一定要加TAG版本,不然無法找到該鏡像。 
RUN yum install -y curl  # 執行安裝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 執行1個構建觸發器
father---image---onbuild====886   # 數據是父鏡像ONBUILD指令執行的內容   
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、補充:crul命令解釋

  • curl命令可以用來執行下載、發送各種HTTP請求,指定HTTP頭部等操作。
  • 如果系統沒有curl命令可以使用yum install curl命令安裝,也可以下載安裝。
  • curl是將下載文件輸出到stdout(標準輸出,也就是控制臺中)。
    例如:
    使用命令:curl http://www.baidu.com
    執行后,www.baidu.com的HTML頁面內容,就會顯示在屏幕上了。
    這是最簡單的使用方法,用這個命令獲得了URL所指向的頁面。
  • 同樣,如果這里的URL指向的是一個文件或者一幅圖,都可以直接下載到本地。如果下載的是HTML文檔,那么將缺省響應頭部的信息,即HTML文檔的header。要想全部顯示,請加參數- i。
04-01 11:07
护士巨好爽好大乳 - 成男女人看片免费视频播放人 - 久青青在线观看视频国产 - 97中文字幕在线