docker - 中间容器是如何形成的?

我想了解使用 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 镜像是分层的。当你构建一个新镜像时,Docker 会为 Dockerfile 中的每条指令(RUNCOPY 等)执行此操作:

  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 将此称为 Union File System这也是图像如此高效的主要原因。

https://stackoverflow.com/questions/39705085/

相关文章:

amazon-web-services - 如何将 Kubernetes 日志发送到 AWS Clo

python - 如何使用 pip 安装本地软件包作为 docker 构建的一部分?

docker - Jenkins + Docker : How to control docker

docker - 如何为 Docker 中的容器分配域名?

docker - 在 Dockerbuild 文件中使用 docker-compose 环境变量

docker - Docker 容器中的 asp.net 核心与 Azure App 服务

docker - boot2docker 存储的 docker 镜像在哪里?

docker - 如何将 Capistrano 与 Docker 集成进行部署?

docker - 多个 Docker 容器可以使用相同的主机/端口运行吗?

docker - 在 docker 中标记图像