中间容器是如何形成的?
How are intermediate containers formed?
我想了解使用 Docker 文件构建 Docker 图像所涉及的执行步骤。我在下面列出了几个问题。请帮助我了解构建过程。
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
问题三:最终的图像是从中间容器中保存的多层形成的吗?
是的,Docker 图像是分层的。当您构建新图像时,Docker 会为您的 Docker 文件中的每条指令(RUN
、COPY
等)执行此操作:
- 从前一个图像层(或第一个命令的基础
FROM
图像创建一个临时容器;
- 运行临时"intermediate"容器中的Docker文件指令;
- 将临时容器保存为新的图像层。
最终图像层标记有您命名图像的任何名称 - 如果您 运行 docker history raghavendar/hands-on:2.0
,这将很清楚,您会看到每一层和创建它的指令的缩写.
您的具体查询:
1) 532
是从图像 ID b17
创建的临时容器,它是您的 FROM
图像 ubuntu:14.04
。
2) ea6
是作为指令输出创建的图像层,即来自保存中间容器 532
。
3) 是的。 Docker 将此称为 Union File System,这是图像如此高效的主要原因。
我想了解使用 Docker 文件构建 Docker 图像所涉及的执行步骤。我在下面列出了几个问题。请帮助我了解构建过程。
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
问题三:最终的图像是从中间容器中保存的多层形成的吗?
是的,Docker 图像是分层的。当您构建新图像时,Docker 会为您的 Docker 文件中的每条指令(RUN
、COPY
等)执行此操作:
- 从前一个图像层(或第一个命令的基础
FROM
图像创建一个临时容器; - 运行临时"intermediate"容器中的Docker文件指令;
- 将临时容器保存为新的图像层。
最终图像层标记有您命名图像的任何名称 - 如果您 运行 docker history raghavendar/hands-on:2.0
,这将很清楚,您会看到每一层和创建它的指令的缩写.
您的具体查询:
1) 532
是从图像 ID b17
创建的临时容器,它是您的 FROM
图像 ubuntu:14.04
。
2) ea6
是作为指令输出创建的图像层,即来自保存中间容器 532
。
3) 是的。 Docker 将此称为 Union File System,这是图像如此高效的主要原因。