compose build 与 pull 是什么
compose build 按服务定义里 build 段的内容构建镜像,compose pull 只拉取 image 段指定的镜像,两者控制的是不同的镜像来源。build 的常用参数有 --no-cache 全量重建、--pull 构建前强制拉取最新基础镜像,指定服务名则只构建该服务。在 CI 里必须分清某个服务是本地构建还是拉取现成镜像,混用会造成『代码改了但跑的还是旧镜像』这类问题。
基本信息
| build 行为 | 按 build 段构建;指定服务名则只构建该服务 |
|---|---|
| --no-cache | 跳过缓存全量重建 |
| --pull | 构建前强制拉取最新基础镜像 |
| pull 行为 | 只更新 image 指定的镜像,完全不涉及构建 |
| 并行能力 | 默认多构建任务并行进行,服务间依赖会自动排序 |
典型使用场景
- 本地开发改完代码后重建镜像再启动,确保容器里是新代码
- CI 中先拉取最新基础镜像再构建,避免底座长期停留在过期版本
- 基础镜像发布安全补丁后,主动触发一次全量重建
- 只重建发生变更的服务,缩短流水线的整体耗时
- 与启动一步到位:用 up -d --build 完成重建与启动,减少操作步骤
使用示例
使用示例
docker compose build --pull web
docker compose build --no-cache
docker compose pull db
docker compose up -d --build
docker compose config --services # 先确认服务名,避免指定错服务
# 判断改动是否生效:对比镜像 ID 与容器启动时间命令与作用范围
| 命令 | 作用对象 | 典型场景 |
|---|---|---|
| compose build | build 段定义的服务 | 代码变更后重建镜像 |
| compose build --pull | 同上并更新基础镜像 | 基础镜像有安全更新时 |
| compose pull | image 段指定的镜像 | 第三方组件版本升级 |
| compose up -d --build | 构建后启动 | 一体化部署脚本 |
| compose up -d | 直接使用已有镜像 | 只改了启动参数或环境变量 |
镜像标签写成 latest 时,pull 得到的结果不可预期:生产环境应固定版本标签,让升级动作显式、可回退、可复现。
执行 pull 并不等于部署完成:镜像更新后必须重建容器才会生效,只拉镜像不重建,改动看起来完全没有作用。