docker compose build 是什么
compose build 按编排文件里服务的 build 节构建镜像,把构建与启动分成两步。它支持指定服务、强制不使用缓存、构建前刷新基础镜像,并把构建参数透传给 Dockerfile。理解要点在分工:build 只负责产出镜像,不会重启已经在跑的容器;要让运行中的服务换上新镜像,仍需执行 up。
基本信息
| 语法 | docker compose build [服务…] [--no-cache] [--pull] [--build-arg K=V] |
|---|---|
| 构建定义 | 服务下的 build 节:context、dockerfile、args、target、platforms |
| 关联命令 | docker compose up --build 边构建边启动 |
| 镜像命名 | 服务同时写 image 与 build 时,构建产物按 image 命名 |
| 仅写 image | 没有 build 节的服务不受 build 命令影响 |
| 缓存控制 | 支持通过编排文件配置缓存导入导出相关选项 |
典型使用场景
- 本地修改代码后重建服务镜像并重启
- 发布前统一构建多个服务,再一起启动
- 排查依赖异常:--no-cache 全量重建排除缓存干扰
- 跟进基础镜像安全更新:--pull 拉取新底座再构建
- 用 --build-arg 为不同环境注入版本号或仓库地址
编排文件与构建命令
编排文件与构建命令
services:
web:
build:
context: ./web
dockerfile: Dockerfile
target: runtime # 多阶段构建指定目标阶段
args:
APP_VERSION: ${TAG:-dev}
image: app/web:${TAG:-dev} # 构建产物按这个名字入库常用构建动作
常用构建动作
# 构建全部服务
docker compose build
# 只构建某个服务,全量重建排除缓存干扰
docker compose build --no-cache web
# 构建前刷新基础镜像,顺带拿到上游安全修复
docker compose build --pull web
# 透传构建参数(不写进文件,适合临时验证)
docker compose build --build-arg VERSION=1.4.3 api
# 构建完成后让运行中的服务用上新镜像
docker compose up -d --no-deps web常用选项
| 选项 | 作用 | 适用时机 |
|---|---|---|
| 服务名 | 只构建指定服务 | 单服务迭代 |
| --no-cache | 忽略全部缓存 | 依赖或基础镜像疑似异常 |
| --pull | 先拉取基础镜像 | 例行安全更新 |
| --build-arg | 透传构建参数 | 临时覆盖版本号 |
| --progress | 设置日志形式 | CI 留存完整日志 |
| up --build | 构建后立即启动 | 一体化部署流程 |
build 与 up 分离是有意设计的:先在构建阶段确认镜像产物无误,再决定何时切换运行实例,避免构建失败直接导致服务中断。
只有 image 没有 build 的服务,compose build 会直接跳过;想让这类服务换版本,应改为拉取新标签或补上 build 节。