Skip to content

Commit c011d62

Browse files
committed
feat(devops): 新增可交互的 Docker 镜像清理脚本
新增 `scripts/pwsh/devops/Clean-DockerImages.ps1` 脚本,用于安全清理冗余 Docker 镜像以释放磁盘空间。默认采用保守策略(仅清理 dangling 和长期未使用的镜像),并提供显式激进模式开关。支持通过 `fzf` 进行交互式多选删除,缺失 `fzf` 时将快速失败并提示安装。脚本集成 `DryRun` 预览、可配置的保留规则以及清理前后的空间统计输出,确保操作的可控性和可验证性。
1 parent a501c13 commit c011d62

6 files changed

Lines changed: 61 additions & 0 deletions

File tree

openspec/changes/cleanup-docker-images/.openspec.yaml renamed to openspec/changes/archive/2026-03-03-cleanup-docker-images/.openspec.yaml

File renamed without changes.

openspec/changes/cleanup-docker-images/design.md renamed to openspec/changes/archive/2026-03-03-cleanup-docker-images/design.md

File renamed without changes.

openspec/changes/cleanup-docker-images/proposal.md renamed to openspec/changes/archive/2026-03-03-cleanup-docker-images/proposal.md

File renamed without changes.

openspec/changes/cleanup-docker-images/specs/docker-image-cleanup/spec.md renamed to openspec/changes/archive/2026-03-03-cleanup-docker-images/specs/docker-image-cleanup/spec.md

File renamed without changes.

openspec/changes/cleanup-docker-images/tasks.md renamed to openspec/changes/archive/2026-03-03-cleanup-docker-images/tasks.md

File renamed without changes.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
## ADDED Requirements
2+
3+
### Requirement: Safe default image cleanup
4+
系统 SHALL 在默认模式下仅清理低风险冗余镜像(包括 dangling 镜像与满足时间阈值且未被运行中容器使用的镜像),并 MUST 避免直接执行激进全量删除。
5+
6+
#### Scenario: 默认执行时使用保守策略
7+
- **WHEN** 用户不传入激进模式参数运行清理脚本
8+
- **THEN** 脚本仅选择低风险候选镜像并跳过受保护镜像
9+
10+
### Requirement: Fzf multi-select interaction
11+
系统 SHALL 提供基于 `fzf` 的多选交互流程,让用户从候选镜像中选择实际删除项。
12+
13+
#### Scenario: 用户通过 fzf 选择删除目标
14+
- **WHEN** 用户启用交互式多选模式运行清理脚本
15+
- **THEN** 脚本通过 `fzf` 展示候选镜像并仅对用户选中的条目执行删除
16+
17+
### Requirement: Fzf dependency enforcement
18+
系统 SHALL 在进入交互式多选流程前检测 `fzf` 可用性;若未安装,MUST 立即失败并输出明确安装提示。
19+
20+
#### Scenario: 缺失 fzf 时快速失败并提示安装
21+
- **WHEN** 用户启用交互式多选模式且运行环境不存在 `fzf`
22+
- **THEN** 脚本以非零退出并输出可执行的 `fzf` 安装提示
23+
24+
### Requirement: Dry-run preview before deletion
25+
系统 SHALL 支持 `DryRun` 预览模式,并在该模式下仅展示候选镜像、预计释放空间与将执行命令,MUST NOT 实际删除任何镜像。
26+
27+
#### Scenario: DryRun 不产生实际删除
28+
- **WHEN** 用户以 `-DryRun` 运行清理脚本
29+
- **THEN** 脚本输出候选与统计信息且 Docker 镜像集合保持不变
30+
31+
### Requirement: Configurable keep rules
32+
系统 SHALL 支持通过仓库名列表与 tag 正则配置保留规则,并 MUST 在执行删除前对候选镜像应用保留过滤。
33+
34+
#### Scenario: 保留规则命中时镜像被跳过
35+
- **WHEN** 候选镜像的仓库名或 tag 命中保留规则
36+
- **THEN** 脚本将该镜像标记为保留并不执行删除
37+
38+
### Requirement: Explicit aggressive cleanup mode
39+
系统 SHALL 提供显式激进模式开关用于清理更多未使用镜像,并 MUST 在执行前输出风险提示以确认该模式非默认行为。
40+
41+
#### Scenario: 激进模式仅在显式开启时触发
42+
- **WHEN** 用户未提供激进模式参数
43+
- **THEN** 脚本不执行激进级别的镜像清理命令
44+
45+
#### Scenario: 激进模式执行前提示风险
46+
- **WHEN** 用户提供激进模式参数运行脚本
47+
- **THEN** 脚本在执行删除前输出明确风险说明与本次模式标识
48+
49+
### Requirement: Cleanup result reporting
50+
系统 SHALL 在清理前后输出磁盘占用统计,并 SHALL 至少包含镜像占用变化信息以验证清理收益。
51+
52+
#### Scenario: 清理结果可对比
53+
- **WHEN** 脚本完成一次清理流程(含 DryRun 或实际执行)
54+
- **THEN** 输出中包含清理前后统计及差异信息
55+
56+
### Requirement: Docker dependency check
57+
系统 SHALL 在执行前检查 Docker CLI 可用性;若环境不满足,MUST 以非零退出并提供可理解错误信息。
58+
59+
#### Scenario: Docker 不可用时快速失败
60+
- **WHEN** 运行环境不存在可用的 `docker` 命令
61+
- **THEN** 脚本立即失败并提示 Docker 不可用原因

0 commit comments

Comments
 (0)