我想了解使用Dockerfile构建Docker映像所涉及的执行步骤。我在下面列出了几个问题。请帮助我了解构建过程。
#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 .
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映像是分层的。当你建立一个新的形象,码头工人做这行的每个指令(RUN,COPY你Dockerfile等):
RUN
COPY
FROM
最终的图像层将使用您命名的图像进行标记-如果运行docker history raghavendar/hands- on:2.0,这将很明显,您会看到每个层以及创建它的指令的缩写。
docker history raghavendar/hands- on:2.0
您的具体查询:
1)532是从图像ID创建的临时容器b17,这是您的FROM图像,ubuntu:14.04。
532
b17
ubuntu:14.04
2)ea6是作为指令输出(即从保存中间容器)创建的图像层532。
ea6
3)是的。Docker将此称为联合文件系统,这是图像如此高效的主要原因。