2016-09-26 97 views
9

我想了解使用Dockerfile構建Docker鏡像所涉及的執行步驟。下面列出了幾個問題。請幫助我理解構建過程。Docker:如何形成中間容器

Dockerfile內容

#from base image 
FROM ubuntu:14.04 
#author name 
MAINTAINER RAGHU 
#commands to run in the container 
RUN echo "hello Raghu" 
RUN sleep 10 
RUN echo "TASK COMPLETED" 

命令用於構建圖像:docker build -t raghavendar/hands-on:2.0 .

Sending build context to Docker daemon 20.04 MB 
Step 1 : FROM ubuntu:14.04 
---> b1719e1db756 
Step 2 : MAINTAINER RAGHU 
---> Running in 532ed79e6d55 
---> ea6184bb8ef5 
Removing intermediate container 532ed79e6d55 
Step 3 : RUN echo "hello Raghu" 
---> Running in da327c9b871a 
hello Raghu 
---> f02ff92252e2 
Removing intermediate container da327c9b871a 
Step 4 : RUN sleep 10 
---> Running in aa58dea59595 
---> fe9e9648e969 
Removing intermediate container aa58dea59595 
Step 5 : RUN echo "TASK COMPLETED" 
---> Running in 612adda45c52 
TASK COMPLETED 
---> 86c73954ea96 
Removing intermediate container 612adda45c52 
Successfully built 86c73954ea96 

在步驟2:

Step 2 : MAINTAINER RAGHU 
    ---> Running in 532ed79e6d55 

[問題1:其指示它是在運行id爲532ed79e6d55的容器,但是容器形成了Docker鏡像? ]

---> ea6184bb8ef5 

[問題2:這個id是什麼?它是圖像還是容器?] 刪除中間容器532ed79e6d55

問題3:最終圖像是否在不同層形成了多個容器?

回答

10

是的,Docker鏡像是分層的。當建立一個新的圖像,多克爾這是否爲在Dockerfile每個指令(RUNCOPY等):

  1. 創建從先前圖像層(或第一個命令的基礎FROM圖像的臨時容器;
  2. 運行在臨時「中間」容器中的Dockerfile指令;
  3. 臨時容器保存爲新的圖像層

最終圖像層被標記有任何你命名IM。年齡 - 如果您運行docker history raghavendar/hands-on:2.0,這將會很清楚,您會看到每個圖層以及創建它的指令的縮寫。

您的具體問題:

1)532是從圖像ID b17,這是你的FROM圖像,ubuntu:14.04創建的臨時容器。

2)ea6是作爲指令輸出而創建的圖像層,即保存中間容器532

3)是的。 Docker稱之爲Union File System,這是圖像效率如此高的主要原因。

相關問題