天天看點

docker學習筆記之建立本地鏡像(三)docker build的結果

docker build -t tonyxinminghui/test:v1 .

Sending build context to Docker daemon 586.9 MB

Step 1 : FROM ubuntu:latest

—> f753707788c5

Step 2 : MAINTAINER Tony “[email protected]”

—> Using cache

—> 9a074bfd4e0f

Step 3 : USER root

—> Using cache

—> cedca328fccd

Step 4 : RUN apt-get update

—> Using cache

—> 49cce3ae4c16

Step 5 : RUN apt-get install -y nginx

—> Using cache

—> c9e03a2f0d91

Step 6 : RUN touch abc.txt && echo “abc” >> abc.txt

—> Using cache

—> 8715d7433ca2

Step 7 : EXPOSE 80 8080 1038

—> Using cache

—> 8ae97691f302

Step 8 : ADD abc.txt /opt/

—> 98c3391c79a4

Removing intermediate container aea360b8fffb

Step 9 : ADD /webapp /opt/webapp

—> 0ee25a0e61d0

Removing intermediate container e3ab8fd354a4

Step 10 : ADD https://www.baidu.com/img/bd_logo1.png /opt/

Downloading [==================================================>] 7.877 kB/7.877 kB

—> 2e4ae58e3323

Removing intermediate container 919b1fc2adcd

Step 11 : ENV WEBAPP_PORT 9090

—> Running in 8838dca291b3

—> a28ca82f6aa0

Removing intermediate container 8838dca291b3

Step 12 : WORKDIR /opt/

—> Running in 76875fe08261

—> 8179c49a18be

Removing intermediate container 76875fe08261

Step 13 : ENTRYPOINT ls

—> Running in b0de32af2a63

—> 8cfa5ad7726a

Removing intermediate container b0de32af2a63

Step 14 : CMD -a -l

—> Running in 9fd357b530e1

—> cad61565b42e

Removing intermediate container 9fd357b530e1

Step 15 : VOLUME /data /var/www

—> Running in 9beb7a612b3c

—> a7ed6fac5337

Removing intermediate container 9beb7a612b3c

Step 16 : ONBUILD add ./app/src

—> Running in 812ad8d2e233

—> 98b1c1765131

Removing intermediate container 812ad8d2e233

Step 17 : ONBUILD run echo “on build excuted” >> onbuild.txt

—> Running in d2249b8afda4

—> 4bd8ffd382f4

Removing intermediate container d2249b8afda4

Successfully built 4bd8ffd382f4

注意點:在ADD添加檔案中,主機檔案/目錄必須在Dockerfile所在目錄的相對位置。比如我的Dockerfile在home下,那麼添加的abc.txt和webapp/目錄也應該在home下。不能是在home下的子目錄下。

當我們建立好鏡像後,可以修改它的tag,如指令

docker tag tonyxinminghui/test:v1 tonyxinminghui/test:v2

建立了一個鏡像的兩個引用。

現在我們來具體研究一下build的過程。

從上述過程來看Dockerfile中的每一條語句都相當于建立了一個臨時鏡像

舉個例子:

Step 8 : ADD abc.txt /opt/

—> 98c3391c79a4

Removing intermediate container aea360b8fffb。

從前一條語句建立的臨時鏡像 運作一個容器aea360b8fffb,執行相應的操作,送出這個容器給另一個臨時鏡像98c3391c79a4,最後删除這容器。可以設定docker build -rm=false,設定不删除臨時緩存。

這時之後的幾個步驟,但是前幾步有所不同。

Step 1 : FROM ubuntu:latest

—> f753707788c5

Step 2 : MAINTAINER Tony “[email protected]”

—> Using cache

—> 9a074bfd4e0f

Step 3 : USER root

—> Using cache

—> cedca328fccd

Step 4 : RUN apt-get update

—> Using cache

—> 49cce3ae4c16

這裡的using cache 使用緩存。這是Docker的緩存機制導緻。每一條指令的執行都會産生緩存鏡像,若指令鍊執行過并産生了緩存鏡像,下次執行時,直接用緩存鏡像,無需再次執行指令。docker build –no-cache=true,可以禁用緩存機制

繼續閱讀