Dockerfile 中 ADD 和 COPY 的区别是什么,为什么官方推荐优先用 COPY?
围绕“Dockerfile 中 ADD 和 COPY 的区别是什么,为什么官方推荐优先用 COPY”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要讲清清 ADD 的 URL 拉取与自动解压特性及其可预期性问题。
Docker · 构建与镜像面试题第 1 页,显示第 1–49 题,共找到 49 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“Dockerfile 中 ADD 和 COPY 的区别是什么,为什么官方推荐优先用 COPY”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要讲清清 ADD 的 URL 拉取与自动解压特性及其可预期性问题。
围绕“为什么基于 Alpine 的镜像在 DNS 解析或本地化上可能出现与 glibc 镜像不同的行为”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖聚焦 musl libc 行为差异导致的隐性 bug 与排查思路。
围绕“Docker 构建参数 ARG 与环境变量 ENV 在何时可见、如何影响镜像”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分构建期变量与运行期变量的持久化差异及误用风险。
围绕“docker buildx bake 如何用一份声明式文件编排多个相关镜像的构建”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 bake 的 HCL/JSON 目标组、矩阵构建与共享缓存价值。
围绕“Dockerfile 中 ARG 的作用域规则是什么,为什么 FROM 之前的 ARG 要重新声明”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要讲清清全局 ARG 与阶段内 ARG 的可见性及对缓存键的影响。
本文解释 Docker 构建缓存按层匹配的具体逻辑:缓存键组成、复用条件与失效传播链,并以依赖清单与源码分离的 COPY 顺序为例说明实践,同时指出忽略 .dockerignore 或合并 COPY 带来的缓存失效扩大及代价。
围绕“Docker 构建上下文是什么,为什么上下文过大会让构建变慢”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释客户端打包上下文发送到构建器的机制及体积影响。
围绕“BuildKit 如何自动并行执行互不依赖的 Dockerfile 构建步骤”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 LLB 依赖图与并行调度,以及多阶段下并行带来的收益。
围绕“docker buildx create 创建远程或容器化 builder 实例解决什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较 docker、docker-container、kubernetes 驱动的能力与隔离性。
围绕“Docker 构建的 registry、local、gha 等缓存后端各有什么取舍”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较持久化位置、并发与模式(min/max)差异,帮助选型。
本文解释Dockerfile中COPY依赖清单先于源码以利用层缓存的具体机制,包括指令排序、缓存命中条件和失败边界,并给出可操作判断。适合理解镜像构建优化。
围绕“BuildKit 的 RUN --mount=type=cache 如何解决包管理器缓存反复下载的问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明缓存挂载不进入镜像层但跨构建复用的机制与挂载点选择。
围绕“如何用 --cache-to 和 --cache-from 在 CI 之间共享 Docker 构建缓存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 registry 与 local 缓存导出模式及其对 CI 加速的意义。
本文解释 Dockerfile 中 COPY --from 引用外部镜像与引用构建阶段的具体区别,包括缓存行为、可重复性与使用场景。通过机制分析和具体工程条件说明如何选择,并指出常见误区。
围绕“Docker 中的 dangling(<none>)镜像如何产生,如何安全清理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释重新打标签导致旧层失去引用及 prune 的回收边界。
围绕“Docker 构建中途失败时,如何利用中间层镜像进入现场排查问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明从报错前一层镜像运行交互 shell 复现指令的诊断流程。
围绕“如何分析一个已有镜像每层的大小与内容,定位体积浪费在哪一层”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出 docker history/inspect 与逐层检查的诊断方法。
本文解析 Dockerfile 中 RUN、COPY、ADD 产生文件层,其他指令仅改动元数据;说明这些层如何影响镜像构建缓存与体积,并通过典型场景给出合并 RUN 与保持缓存的取舍,以及常见误区。
围绕“.dockerignore 如何工作,它与 .gitignore 的规则有何差异”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要讲清清排除模式语法与对 COPY/ADD 及上下文传输的双重影响。
围绕“ENTRYPOINT 与 CMD 在镜像启动时如何组合,如何设计可覆盖的默认行为”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要讲清清两者拼接为最终命令行的规则及 docker run 覆盖 CMD 的行为。
围绕“docker buildx build --output 有哪些输出类型,何时导出 OCI tarball 而非推送”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较 registry、local、tar、oci 输出及离线分发与产物导出的适用场景。
围绕“直接用 Git 仓库 URL 作为 Docker 构建上下文时构建器做了什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明自动克隆、引用指定与子目录支持,以及它和本地上下文的差异。
围绕“在 Dockerfile 中定义 HEALTHCHECK 会怎样影响镜像与容器运行状态”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明健康检查指令固化在镜像中的语义与 status 展示。
围绕“BuildKit 支持的 Dockerfile heredoc 语法解决了哪些写法痛点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明多行 RUN/COPY 脚本免于转义与链式 && 的可读性收益及语法版本要求。
本文解释 Docker 镜像的层结构、只读与共享机制。说明层如何通过内容寻址复用,容器利用可写层隔离写操作,并讨论其适用边界。
围绕“系统性地减小 Docker 镜像体积有哪些互不相同的手段”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖按基础镜像、层合并、清理缓存、多阶段四类归纳手段与边界,不深入某一具体手段的文档细节。
围绕“Docker 镜像 tag 与 digest 的关系是什么,latest 到底意味着什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖澄清 tag 是可变指针、latest 只是默认标签。
围绕“如何用 docker buildx build --platform 一次构建多架构镜像”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要讲清清 buildx 多平台构建与 manifest list 的关系及推送要求,不深入 QEMU 模拟细节。
围绕“Docker 多阶段构建解决了什么问题,最终镜像包含哪些阶段的内容”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明编译环境与运行时分离、仅拷贝产物的机制。
解释 --target 如何指定多阶段 Dockerfile 的构建终点,在 CI 中的典型用途是生成测试镜像和调试镜像,并对比传统构建器与 BuildKit 在依赖裁剪上的差异。
围绕“构建步骤需要访问网络时,--network 与构建隔离的默认值是什么,何时要改”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要讲清清默认网络、host 模式与代理透传的场景及安全考虑。
围绕“Docker 镜像遵循的 OCI image-spec 定义了哪几部分,digest 如何计算”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要讲清清 manifest、config、layer 与内容寻址的关系。
围绕“Docker 容器写文件时 OverlayFS 的写时复制(copy-on-write)会发生什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要讲清清容器可写层如何复制只读层文件以及性能影响。
围绕“为什么用 image@sha256 摘要固定基础镜像比 tag 更可靠,代价是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 tag 可变与摘要不可变的差异及升级维护成本。
围绕“Docker 构建中 BUILDPLATFORM、TARGETPLATFORM 等预定义 ARG 有什么用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明交叉构建时平台变量的取值与典型用法。
围绕“BuildKit 构建时附加的 provenance 与 SBOM attestation 包含什么、如何验证”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明构建来源证明与软件清单的生成、存储与查验方式。
围绕“跨架构构建时 QEMU 模拟何时被触发,对构建速度有何影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释无原生节点时二进制翻译的开销及何时改用交叉编译或远程原生 builder。
围绕“为什么对远程 Dockerfile(如 stdin 或 URL)执行构建需要警惕恶意指令”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明远程上下文构建的信任边界与审查要点。
围绕“要让 Docker 镜像可重复构建,需要固定哪些可变来源”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖枚举基础镜像摘要、包版本、构建时间与外部网络资源等变量。
围绕“为什么 RUN apt-get update && apt-get install 必须写在同一条指令里”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕用 update 层缓存命中而 install 拿到过期索引的失败案例说明原因,不泛化到所有包管理器细节。
围绕“什么样的程序适合用 FROM scratch 构建镜像,静态编译要满足什么条件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明空镜像的适用条件(静态链接、证书、时区数据自带)与限制。
围绕“为什么构建期私密信息应使用 RUN --mount=type=secret 而不是 ARG”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要对比 ARG 会进入镜像历史与元数据、secret 挂载不落盘的差异。
围绕“Dockerfile 中 CMD/ENTRYPOINT 的 shell 形式与 exec 形式对信号处理有何影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 shell 形式多出的 /bin/sh 父进程导致信号无法直达应用的问题。
围绕“选择 alpine、debian slim 或 distroless 基础镜像分别要接受什么取舍”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较 musl/glibc 兼容性、调试工具缺失与体积安全的权衡。
围绕“构建时间戳写进镜像层为什么会破坏可重复构建,如何规避”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释嵌入时间导致 digest 漂移的问题与固定时间戳等手段。
围绕“Docker 构建中如何用 RUN --mount=type=ssh 拉取私有 Git 依赖”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要讲清清 ssh-agent 转发挂载的机制与限制。
围绕“Dockerfile 首行的 # syntax= 指令声明了什么,为什么影响可用特性”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释外部前端镜像决定解析能力、可独立升级获取新语法的机制,不逐项罗列全部新语法。
围绕“RUN --mount=type=bind 与 type=tmpfs 在 Dockerfile 构建中各自适合什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分绑定挂载上下文只读内容与临时内存文件系统的使用场景。
围绕“BuildKit 相比旧版 Docker 构建器有哪些核心改进”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖概括并行构建、增量传输、缓存导入导出与扩展语法等差异,不逐项展开每个 BuildKit 特性。