Dockerfile中CMD指令是否新增镜像层?无层指令列表查询
Dockerfile指令分层相关问题解答
官方表述准确性说明
你看到的官方文档表述属于面向入门用户的简化说法,并非完全严谨的技术定义:
Docker构建过程中所有指令确实会生成临时中间层用于构建缓存,但只有会修改镜像文件系统的指令,才会在最终可分发的镜像中新增独立的文件系统层。仅修改镜像元数据的指令不会新增最终层。
最终镜像中不会新增文件系统层的指令完整列表
CMD:仅设置容器默认启动命令与参数,仅写入镜像元数据ENTRYPOINT:仅配置容器启动入口程序,仅修改镜像元数据ENV:仅设置镜像全局环境变量,仅修改镜像元数据EXPOSE:仅声明容器运行时默认监听的端口,仅修改镜像元数据VOLUME:仅声明容器默认匿名挂载卷路径,仅修改镜像元数据USER:仅设置运行容器的默认用户/用户组,仅修改镜像元数据WORKDIR:仅设置容器默认工作目录,仅修改镜像元数据ARG:仅作用于构建阶段的临时变量,既不会写入最终镜像元数据,也不会新增文件系统层LABEL:仅为镜像添加自定义元数据标签,不修改文件系统STOPSIGNAL:仅设置容器停止触发的系统信号,仅修改镜像元数据HEALTHCHECK:仅配置容器健康检查规则,仅修改镜像元数据SHELL:仅设置构建阶段执行RUN等指令的默认shell程序,仅修改构建元数据
补充说明
官方示例中把所有指令都对应到层,是为了方便新手理解指令执行顺序和构建缓存的匹配逻辑,实际最终镜像里只有FROM、RUN、COPY、ADD这类会修改文件系统内容的指令,才会生成独立的持久化文件系统层。
内容的提问来源于stack exchange,提问作者Celtic Bean
相关产品推荐
相关产品推荐

