当前位置: 首页 > 面试题库 >

中间容器如何形成?

臧增
2023-03-14
问题内容

我想了解使用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 .

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映像是分层的。当你建立一个新的形象,码头工人做这行的每个指令(RUNCOPY你Dockerfile等):

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

最终的图像层将使用您命名的图像进行标记-如果运行docker history raghavendar/hands- on:2.0,这将很明显,您会看到每个层以及创建它的指令的缩写。

您的具体查询:

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

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

3)是的。Docker将此称为联合文件系统,这是图像如此高效的主要原因。



 类似资料:
  • 问题内容: 我想构建一个在其启动日志中显示其构建日期时间的容器。有没有办法将信息从我的构建机器注入到容器中? 问题答案: 构建过程中每个RUN步骤的输出是对文件系统的更改。因此,您可以将日期输出到图像中的文件。容器中的日志只是您运行的命令的标准输出。因此,您可以在入口点中查找日期。 在代码中,您将在Dockerfile的末尾: 在入口点脚本中:

  • 问题内容: 我在Matplotlib中制作条形图,调用如下: 有没有一种方法可以在Matplotlib中使用此功能来实现? 问题答案: 将添加为关键字参数。例如 。 这将垂直填充条形间隙。

  • 我用Matplotlib做了一个条形图,调用如下: 我得到一个条形图,看起来像这样: 我想要的是在连续的条之间没有空白,例如,更像这样: 有没有办法在Matplotlib中使用函数来实现这一点?

  • 我正在尝试构建一个php国际象棋应用程序,并将其包装在容器中。起初,我使用了旧的docker配置,但它不起作用,所以我在上面添加了一些内容(比如将config apache文件复制到容器中等等)。重点是-I copy放入只包含一行代码的容器中。但是在运行容器之后,它显示第5行有错误。当我在运行之前查看文件的内容时,它显示它只包含1行,所以我感到困惑。在回购(下面的链接)中,我有这个文件。 这是我运

  • 问题内容: 有一个列出图像的命令,但是似乎没有对应的。 除了扎根并调查那里似乎没有办法。我想念什么吗?那是不应该做的事情吗? 问题答案: 要仅显示 正在运行的容器,请 使用给定命令: 要显示 所有容器,请 使用给定命令: 要显示 最新创建的容器 (包括所有状态),请使用给定命令: 要显示 n个最后创建的容器 (包括所有状态),请使用给定命令: 要显示 总文件大小,请 使用给定命令: 上面显示的内容

  • 这个问题很像这样,但我还是有问题: 我做错了什么? Docker版本0.6.7,build CB48ECC Ubuntu 3.8.0-33-Generic#48~Precise1-Ubuntu