Dockerfile中每使用一次FROM指令,docker build都会新建容器执行后续命令吗?
关于Dockerfile FROM指令构建流程的问题解答
首先明确:该说法是错误的,详细说明如下:
核心误区纠正
FROM指令的作用仅为指定当前构建阶段的基础镜像,不会触发docker build创建新容器。- 构建过程中只有执行会产生文件系统变更的指令(如
RUN、COPY、ADD等)时,才会基于上一步生成的镜像层临时启动一个容器,执行完对应指令后将文件系统变更提交为新的镜像层,随即销毁该临时容器。
补充说明
- 后续指令并不会在同一个容器内运行:每条需要修改文件系统的指令都会独立启动新的临时容器,执行完成即销毁,不存在长期运行的构建容器。
- 多阶段构建场景下的多个
FROM指令仅用于切换不同的构建阶段,分别为每个阶段指定基础镜像,本身不会产生容器。
举个简单示例说明构建流程:
以下面的Dockerfile为例:FROM alpine:3.18 RUN echo "test1" > /a.txt RUN echo "test2" > /b.txt实际构建流程为:
- 处理
FROM alpine:3.18:加载本地或拉取远端的alpine:3.18镜像作为当前构建的基础层,无容器创建操作。- 执行第一条
RUN指令:基于alpine:3.18镜像启动临时容器,在容器内执行写文件操作,将变更提交为新的镜像层后销毁临时容器。- 执行第二条
RUN指令:基于上一步生成的镜像层启动全新的临时容器,执行写文件操作,提交变更为新镜像层后销毁临时容器。
内容的提问来源于stack exchange,提问作者urig
相关产品推荐
相关产品推荐

