中间容器是如何形成的?

问题描述 投票:24回答:1

我想了解使用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 dockerfile docker-container
1个回答
38
投票

是的,Docker镜像是分层的。构建新映像时,Docker会对Dockerfile中的每个指令(RUNCOPY等)执行此操作:

  1. 从上一个图像层(或第一个命令的基础FROM图像创建一个临时容器;
  2. 在临时的“中间”容器中运行Dockerfile指令;
  3. 将临时容器另存为新的图像层。

[最终图像层被标记为您命名的图像-如果运行docker history raghavendar/hands-on:2.0,这将很清楚,您将看到每一层以及创建它的指令的缩写。

您的特定查询:

1] 532是根据图像ID b17创建的临时容器,该图像ID为FROM图像ubuntu:14.04

2)ea6是作为指令输出(即从保存中间容器532而创建)的图像层。

3)是。 Docker将此称为Union File System,这是图像如此高效的主要原因。

© www.soinside.com 2019 - 2024. All rights reserved.