首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中间容器是如何形成的?

中间容器是如何形成的?
EN

Stack Overflow用户
提问于 2016-09-26 22:07:08
回答 1查看 18.4K关注 0票数 33

我想了解一下使用Dockerfile构建Docker镜像所涉及的执行步骤。下面我列出了几个问题。请帮助我理解构建过程。

Dockerfile内容

代码语言:javascript
复制
#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 .

代码语言:javascript
复制
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中:

代码语言:javascript
复制
Step 2 : MAINTAINER RAGHU
    ---> Running in 532ed79e6d55 

问题1:表示运行在id为- 532ed79e6d55的容器中,但是这个容器是用什么Docker镜像形成的?

代码语言:javascript
复制
---> ea6184bb8ef5  

问题2:这个id是什么?它是镜像还是容器?

代码语言:javascript
复制
Removing intermediate container 532ed79e6d55

问题3:最终的图像是从中间容器保存的多层图像吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-26 23:34:11

是的,Docker镜像是分层的。当你建立一个新的镜像时,Docker会为每条指令(RUNCOPY等)做这件事。在Dockerfile中:

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

最终的图像层被标记为您为图像命名的任何名称-如果您运行docker history raghavendar/hands-on:2.0,这将是清晰的,您将看到每个层和创建它的指令的缩写。

您的特定查询:

1) 532是由镜像ID b17创建的临时容器,镜像ID是您的FROM镜像ubuntu:14.04

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

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

票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39705085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档