我想了解使用Dockerfile构建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是什么?是图像还是容器?Removing intermediate container 532ed79e6d55
问题3:是否从中间容器中保存了多层形成的最终图像? 最佳答案
是的,Docker镜像是分层的。构建新镜像时,Docker会对Dockerfile中的每条指令(RUN
,COPY
等)执行此操作:
FROM
图像)创建一个临时容器; 最终的图像层将使用您命名的图像进行标记-如果运行
docker history raghavendar/hands-on:2.0
,这将很清楚,您将看到每个层以及创建它的指令的缩写。您的具体查询:
1)
532
是根据图片ID b17
创建的临时容器,它是您的FROM
图片ubuntu:14.04
。2)
ea6
是作为指令输出(即从保存中间容器532
而创建)的图像层。3)是的。 Docker将其称为Union File System,这是图像如此高效的主要原因。
关于docker - 中间容器如何形成?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39705085/