Docker CLI `docker build` 命令完整参考:构建镜像的选项体系与底层实现详解
CLI开发工具【免费下载链接】cliThe Docker CLI项目地址https://gitcode.com/gh_mirrors/cli5/cli点击查看免费下载docker build是从 Dockerfile 构建镜像的核心命令本文基于 docs/reference/commandline/build.md 参考页完整梳理该命令的全部命令行选项与默认值并结合本仓库源码深入讲解构建上下文处理、资源限制参数、.dockerignore 过滤机制以及docker build转发至 buildx 的底层实现。读完本文你将掌握docker build每个参数的语义与适用场景并能在脚本化构建如--iidfile、--quiet与多阶段构建--target中正确选配参数。命令概览用法与别名docker build的完整用法为docker build [OPTIONS] PATH | URL | -其作用是Build an image from a Dockerfile从一个 Dockerfile 构建镜像。在命令注册层面该命令定义于 cli/command/image/build.go 的newBuildCommand中Use字段即为build [OPTIONS] PATH | URL | -且要求必须且仅接受 1 个位置参数Args: cli.ExactArgs(1)。该命令同时注册了三个别名含义完全相同别名说明docker build主命令形式docker image build按资源类型组织的子命令形式docker builder build在builder管理构建命令组下的形式命令的 Annotations 中记录了aliases: docker image build, docker build, docker builder build这就是三个别名同源的直接依据。在 cli/command/builder/cmd.go 中builder命令组通过image.NewBuildCommand(dockerCLI)挂载了 build 子命令同时注册了bake占位命令BuildKit 启用且安装 buildx 插件后会被动态替换为docker buildx bake的别名。完整选项表参数即命令骨架下表完整继承自参考文档包含每个选项的类型与默认值是docker build的命令骨架选项类型默认值说明--add-hostlist添加自定义主机到 IP 的映射host:ip--build-arglist设置构建时变量--cache-fromstringSlice作为缓存来源的镜像--cgroup-parentstring为构建期间的RUN指令设置父 cgroup--compressbool使用 gzip 压缩构建上下文--cpu-periodint640限制 CPU CFS完全公平调度器周期--cpu-quotaint640限制 CPU CFS完全公平调度器配额-c,--cpu-sharesint640CPU 份额相对权重--cpuset-cpusstring允许执行的 CPU0-3、0,1--cpuset-memsstring允许执行的内存节点0-3、0,1-f,--filestringDockerfile 名称默认是PATH/Dockerfile--force-rmbool总是移除中间容器--iidfilestring将镜像 ID 写入该文件--isolationstring容器隔离技术--labellist为镜像设置元数据-m,--memorybytes0内存限制--memory-swapbytes0Swap 限制等于内存加 swap-1表示启用无限 swap--networkstringdefault为构建期间的RUN指令设置网络模式--no-cachebool构建镜像时不使用缓存--platformstring若服务器支持多平台则设置平台--pullbool总是尝试拉取镜像的更新版本-q,--quietbool抑制构建输出成功时仅打印镜像 ID--rmbooltrue成功构建后移除中间容器--security-optstringSlice安全选项--shm-sizebytes0/dev/shm的大小--squashbool将新构建的层压缩为单个新层-t,--taglist名称及可选标签格式为name:tag--targetstring设置要构建的目标构建阶段--ulimitulimitUlimit 选项这些选项在源码中对应 cli/command/image/build.go 的buildOptions结构体字段并由imageBuildOptions()函数cli/command/image/build.go逐项映射为client.ImageBuildOptions传给 daemon 的/buildAPI。下面按功能域分组深入讲解。上下文与 Dockerfile构建的输入模型三种位置参数形式PATH | URL | -docker build的位置参数决定了构建上下文的来源源码中通过build.DetectContextType(options.context)判断类型见 cli/command/image/build.go本地目录PATH调用build.GetContextFromLocalDir将目录打包成 tar 作为上下文如果目录是符号链接会先EvalSymlinks解析到真实目录见 cli/command/image/build/context.go。Git 仓库 URL调用build.GetContextFromGitURL先用git clone将仓库克隆到临时目录再作为上下文并要求 Dockerfile 必须位于构建上下文之内见 cli/command/image/build/context.go。远程 URL调用build.GetContextFromURL下载资源并通过进度读取器打印Downloading build context from remote url进度信息见 cli/command/image/build/context.go。STDIN-通过build.GetContextFromReader读取会先探测输入是 tar 归档还是 Dockerfile 文本若是 tar 归档则直接作为上下文若是 Dockerfile 则写入临时目录后重新打包见 cli/command/image/build/context.go。注意一个限制若用-f -从 STDIN 读取 Dockerfile则不能同时用-作为构建上下文源码会直接报错invalid argument: cant use stdin for both build context and dockerfile。-f, --file指定 Dockerfile 路径默认 Dockerfile 文件名是DockerfiledefaultDockerfileName常量见 cli/command/image/build/context.go。源码中getDockerfileRelPath的逻辑显示未指定-f时优先查找上下文目录下的Dockerfile找不到时再兼容查找小写的dockerfile。-f指定的 Dockerfile 若位于构建上下文之外相对路径以..开头CLI 会直接读取该文件内容并在打包时注入上下文见 cli/command/image/build.go 与 cli/command/image/build/context.go 的AddDockerfileToBuildContext。注意使用本地目录作为上下文时-f的路径是相对于当前工作目录而非上下文目录解析的。--target多阶段构建的定点输出--target指定 Dockerfile 中要构建的目标构建阶段stage用于多阶段构建multi-stage build场景。它最终透传为ImageBuildOptions.Target。典型用法是只构建到中间产物阶段例如docker build --target builder -t myapp:build .避免最终阶段引入的不必要内容。镜像元数据命名、变量与标签-t, --tag镜像名称与标签格式为name:tag可以多次指定list类型一个构建产物可同时打多个标签。该参数使用opts.NewListOpts(validateTag)收集validateTag通过reference.ParseNormalizedNamed校验名称合法性见 cli/command/image/build.go。--build-arg构建时变量用于向构建过程传递变量如--build-arg HTTP_PROXYhttp://proxy:8080对应 Dockerfile 中的ARG指令。源码中通过opts.ValidateEnv校验键值格式并会与配置文件中的代理设置合并configFile.ParseProxyConfig(...)会自动补充HTTP_PROXY、HTTPS_PROXY、NO_PROXY、FTP_PROXY等代理相关构建参数见 cli/command/image/build.go。--label镜像元数据为构建出的镜像添加标签格式keyvalue使用opts.ValidateLabel校验可多次指定。常用于记录构建信息例如--label org.opencontainers.image.sourcehttps://example.com/project。构建过程行为控制--no-cache与--pull缓存策略--no-cache构建时完全不使用缓存层每次都重新执行所有指令。--pull总是尝试拉取基础镜像的最新版本即使本地已有保证基础镜像不过期。--rm与--force-rm中间容器清理--rm默认值为true成功构建后移除中间容器。--force-rm总是移除中间容器即使构建失败便于排查构建占用空间问题。-q, --quiet与--iidfile脚本化构建输出-q, --quiet抑制构建输出成功时仅向 stdout 打印镜像 ID。源码实现上会把进度与构建输出缓冲到内存缓冲区bytes.NewBuffer仅当LastUpdate时输出进度lastProgressOutput见 cli/command/image/build.go最终把 daemon 返回的镜像 ID 打印到 stdout。--iidfile把镜像 ID 写入指定文件。源码会先删除可能残留的旧文件避免陈旧结果并在服务器未返回镜像 ID 时明确报错见 cli/command/image/build.go。两者常组合用于 CI 流水线中例如docker build -q --iidfile image.id .后由下游任务读取该文件。--compress与--cache-from传输与缓存优化--compress用 gzip 压缩发送给 daemon 的构建上下文 tar 流见 cli/command/image/build/context.go 的Compress函数。--cache-from指定作为缓存来源的镜像列表stringSlice配合外部缓存镜像如导出后的构建缓存加速重复构建。--network与--add-hostRUN 指令的网络环境--network默认值为default设置构建期间RUN指令的网络模式可选none、host等。该选项从 API 版本 1.25 起可用。--add-host添加host:ip自定义主机映射如--add-hostmyhost:192.168.1.100等同于在构建环境中注入/etc/hosts条目。--security-opt与--isolation安全与隔离--security-opt传递安全选项stringSlice例如--security-opt seccompunconfined或--security-opt labeldisable。--isolation指定容器隔离技术如 Windows 上的process、hypervLinux 下通常无需设置。--squash与--platform--squash将新构建的多个层压缩为单个新层。该选项在源码中标注为experimentalAnnotationsquash - experimentalAPI 版本 1.25 起属于实验特性。--platform设置构建平台如linux/amd64、linux/arm64。默认值取自DOCKER_DEFAULT_PLATFORM环境变量见 cli/command/image/build.go该选项自 API 版本 1.38 起可用且命令注册了completion.Platforms()平台补全函数。构建前会先通过platforms.Parse校验格式合法性。资源限制参数CPU 与内存这类参数直接映射到client.ImageBuildOptions的对应字段最终由 daemon 在构建容器上施加 cgroup 限制参数字段说明-m, --memoryMemory内存上限bytes0表示不限制--memory-swapMemorySwap内存加 swap 的总上限-1表示启用无限 swap--shm-sizeShmSize/dev/shm大小bytes用于构建中涉及共享内存的场景-c, --cpu-sharesCPUSharesCPU 相对权重默认0即 1024 基准--cpu-periodCPUPeriodCFS 调度周期微秒默认0表示使用系统默认--cpu-quotaCPUQuotaCFS 配额微秒配合--cpu-period使用--cpuset-cpusCPUSetCPUs允许使用的 CPU 集合如0-3或0,1--cpuset-memsCPUSetMems允许使用的内存节点集合NUMA如0-3--cgroup-parentCgroupParentRUN指令所在 cgroup 的父级--ulimitUlimits资源上限如--ulimit nofile1024:2048可多次指定对应的字段映射见 cli/command/image/build.go。需要说明的是--cpu-period与--cpu-quota依赖宿主内核的 CFS 支持Linux 下需配合 cgroup v1/v2 环境使用。.dockerignore构建上下文裁剪机制当使用本地目录作为构建上下文时CLI 会先读取上下文目录下的.dockerignore文件见 cli/command/image/build/dockerignore.go将匹配模式作为排除规则。随后ValidateContextDirectory逐文件校验上下文可读性并依据排除规则跳过被忽略的路径见 cli/command/image/build/context.goTrimBuildFilesFromExcludes会保证 Dockerfile 与.dockerignore本身始终进入上下文追加!.dockerignore、!Dockerfile反向规则见 cli/command/image/build/dockerignore.go最终通过archive.TarWithOptions按排除规则打包上下文见 cli/command/image/build.go。因此合理的.dockerignore排除node_modules、.git、*.log等能显著减小上下文体积、加快构建。另外--compress只压缩网络传输不会改变上下文内容本身。底层机制docker build如何转发到 buildx当前仓库中docker build默认通过 cmd/docker/builder.go 的processBuilder逻辑将命令转发给 buildx 插件。转发规则定义在forwardBuilder函数cmd/docker/builder.go覆盖以下命令形态用户输入转发为记录的命令路径前缀docker builddocker buildx build无docker image builddocker buildx buildimagedocker builder subdocker buildx subbuilderdocker bakedocker buildx bake无转发过程中的关键决策逻辑DOCKER_BUILDKIT环境变量为空时默认走 BuildKit 路径显式设为0时禁用 BuildKit 并回退到旧版legacy构建器同时打印弃用警告DEPRECATED: The legacy builder is deprecated and will be removed in a future release.设为1时强制使用 buildx若插件缺失或损坏则直接报错见 cmd/docker/builder.go。测试用例 cmd/docker/builder_test.go 的TestBuildkitDisabled与TestBuilderBrokenEnforced验证了这两条路径。--builder参数与BUILDX_BUILDER环境变量hasBuilderName会检查命令行与环境中是否显式指定了 builder 名称若未指定转发时会自动注入BUILDX_BUILDER当前上下文名环境变量确保docker build始终使用默认 context 对应的 builder见 cmd/docker/builder.go测试TestBuildWithBuilder验证了BUILDX_BUILDERdefault的注入行为。别名机制可在配置文件~/.docker/config.json的aliases字段中将builder映射到自定义插件如{builder: buildx}仅builder键被允许见 cmd/docker/aliases.go。需要说明的是BuildKitbuildx的完整选项集比本文所列的旧版构建器选项更丰富本文以参考文档列出的选项为准启用 BuildKit 后docker build --help会展示 buildx 的完整帮助。实战示例# 1. 基础构建使用默认 Dockerfile打标签 docker build -t myapp:latest . # 2. 指定 Dockerfile 与构建参数 docker build -f docker/prod.Dockerfile \ --build-arg VERSION2.1.0 \ -t myapp:2.1.0 . # 3. 多阶段构建定位目标阶段 docker build --target builder -t myapp:build . # 4. 脚本化构建安静模式 写入镜像 ID 文件 docker build -q --iidfile image.id -t myapp:ci . cat image.id # 5. 限制构建资源配合 cgroup docker build --memory 1g --memory-swap 1.5g --cpuset-cpus 0,1 -t myapp . # 6. 从 Git 仓库上下文构建 docker build https://github.com/example/project.git#main # 7. 从 STDIN 提供 Dockerfile docker build -f - . Dockerfile # 8. 添加自定义主机映射并禁用缓存 docker build --add-host api.internal:10.0.0.5 --no-cache -t myapp .版本与兼容性说明--network与--squash自 API 版本 1.25 起可用其中--squash标注为实验特性。--platform自 API 版本 1.38 起可用默认值来源于DOCKER_DEFAULT_PLATFORM环境变量。docker builder命令组含prune等子命令标注版本为 1.31builder prune标注为 1.39。旧版构建器已进入弃用流程DOCKER_BUILDKIT0或缺少 buildx 插件时会收到弃用警告建议安装 buildx 组件以使用 BuildKit 进行构建。赞分享CLI开发工具【免费下载链接】cliThe Docker CLI项目地址https://gitcode.com/gh_mirrors/cli5/cli点击查看免费下载相关推荐Docker CLI 镜像清理实战docker image prune 命令详解与底层实现Docker CLI 镜像清理实战docker image prune 命令详解与底层实现 docker image prune 是 Docker CLI 中CLI开发工具在 nix-darwin 中集成 Home Manager 模块macOS 用户环境的声明式管理实战在 nix darwin 中集成 Home Manager 模块macOS 用户环境的声明式管理实战 本文围绕 Home Manager 提供的 nix daCLI开发工具Hugo build 命令详解完整 CLI 参数、默认行为与底层构建管线Hugo build 命令详解完整 CLI 参数、默认行为与底层构建管线 hugo build 是 HugoThe worlds fastest fram开发工具前端CLI上一篇Lightweight Charts™ 可刷选区域序列Brushable Area Series插件完全指南1.0.0 特性、选项体系与源码实现剖析下一篇jQuery Mockjax 使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Kubernetes Python Client 的 V1LifecycleHandler 模型详解:容器生命周期钩子的四种动作与用法

Kubernetes Python Client 的 V1LifecycleHandler 模型详解:容器生命周期钩子的四种动作与用法

后端云原生容器编排 【免费下载链接】python Official Python client library for kubernetes 项目地址: https://gitcode.com/gh_mirrors/python1/python 点击查看 免费下载 本篇技术指南以 Kubernetes 官方 Python 客户端仓库(GitHub 加速计划 / pyth…

2026/10/10 5:11:27 阅读更多 →
trueforge Postgres 持久层开发规范:timestamptz、防 N+1 与 lock_timeout 迁移的工程实践

trueforge Postgres 持久层开发规范:timestamptz、防 N+1 与 lock_timeout 迁移的工程实践

【免费下载链接】trueforge The open-source agent harness - the runtime layer that turns an LLM into a working agent. 项目地址: https://gitcode.com/gh_mirrors/tr/trueforge 点击查看 免费下载 本篇指南围绕 trueforge 开源仓库中 Postgres 持久层开发约定…

2026/10/10 5:11:27 阅读更多 →
dbx 的 Pulsar 4.2 冒烟测试环境:public/default 命名空间与 dbx-smoke 主题实战

dbx 的 Pulsar 4.2 冒烟测试环境:public/default 命名空间与 dbx-smoke 主题实战

数据库开发者工具桌面应用CLIMCP 服务AI 应用 【免费下载链接】dbx 15MB,轻量级跨平台数据库客户端、数据库管理工具。支持 MySQL、PostgreSQL、SQLite、Redis、MongoDB、DuckDB、ClickHouse、SQL Server 等。15MB, lightweight, cross-platform database client. S…

2026/10/10 5:11:27 阅读更多 →

最新新闻

缩短招聘周期:从人才画像到Offer的11个高效策略

缩短招聘周期:从人才画像到Offer的11个高效策略

招聘周期拉长,用人部门催、候选人等不起、HR夹在中间两头受气——这是过去几年我在各类企业里反复看到的真实场面。尤其遇到急招岗位,从职位发布到人选入职动辄拖上三四十天,错过业务窗口不说,还经常出现“谈好的Offer被对手截胡”…

2026/10/10 5:45:40 阅读更多 →
MyBatis动态SQL核心用法:多条件查询、批量操作与安全实践

MyBatis动态SQL核心用法:多条件查询、批量操作与安全实践

做后端几年,动态 SQL 基本是每天都要打交道的东西。业务方今天要按名称筛,明天要加时间范围,后天又要排除某几个状态,如果每换一种组合就写一条 SQL,代码量会无限膨胀。更麻烦的是,条件一变,拼接…

2026/10/10 5:45:40 阅读更多 →
C++函数传参与内存模型:对象生命周期与RAII解析

C++函数传参与内存模型:对象生命周期与RAII解析

我记得带过不少刚学编程的新同学,很多人是在“指针”“内存”“类”这三座大山面前开始动摇的。前两讲我们把语法基础过了一遍,第三讲正好站在一个分水岭上:如果只看代码表面,你写的还是C;但如果理解了函数回调机制、内…

2026/10/10 5:45:40 阅读更多 →
基于Python的多元统计分析课设源码:从K-means到PCA实战解析

基于Python的多元统计分析课设源码:从K-means到PCA实战解析

简介:这是一份面向高校生与数据学习者的多元统计分析课程设计源码包,覆盖描述性统计、回归分析、因子分析、主成分分析、k均值与层次聚类、Apriori关联规则等经典方法,每个Python脚本对应一个独立实验,从数据读取、清洗到结果输出…

2026/10/10 5:45:40 阅读更多 →
Python54-55:核心语法-数据容器-字典dict-案例

Python54-55:核心语法-数据容器-字典dict-案例

开发一个购物车管理系统,实现商品信息的添加、修改、删除、查询功能。系统使用字典结构存储商品数据,通过控制台菜单与用户交互。具体功能如下:添加购物车:用户根据提示录入商品名称、以及该商品的价格、数量,保存该商…

2026/10/10 5:45:40 阅读更多 →
开源实时协作Markdown编辑器HedgeDoc:自托管与权限管理指南

开源实时协作Markdown编辑器HedgeDoc:自托管与权限管理指南

如果你所在的环境里,协作记录一直散落在聊天记录、本地文本和邮箱附件之间,我建议你认真了解一下 HedgeDoc。它是一款开源的、基于 Web 的实时协作 Markdown 编辑器,浏览器打开就能用,也能在自己的服务器上搭建。我把团队内部的技…

2026/10/10 5:44:39 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →