2016-09-26 43 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,这是图像效率如此高的主要原因。

相关问题