一个用 Rust 编写的命令行工具,用于智能裁剪 Docker 镜像层,减小镜像体积,提升部署效率。
在容器化部署中,Docker 镜像往往包含大量与运行环境重复的层,导致镜像体积臃肿、拉取缓慢。本工具自动裁剪掉重复层,生成一个保持完整功能但体积更小的新镜像。
- 核心价值:减少存储与传输开销,加速 CI/CD 流水线,优化边缘场景下的镜像分发。
- 差异计算:使用集合运算快速找出镜像中独有(需保留)的层。
- 智能裁剪:基于差异结果重构 tar 包,仅保留必要层,同时保持镜像结构完整。
- 向后兼容:生成的裁剪镜像仍符合 Docker 镜像规范,可直接加载运行。
除了命令行方式,在 Windows 环境下你还可以通过拖拽文件来快速运行裁剪:
- 将编译好的
docker-image-tool.exe(位于target/release/)复制到任意目录(例如桌面)。 - 同时选中镜像 tar 文件(如
image.tar)和 JSON 元数据文件(如info.json)。 - 将这两个文件拖拽到
docker-image-tool.exe图标上。 - 工具会自动处理,并在同级目录下生成裁剪后的镜像文件(文件名后缀为
_trimmed.tar)。
注意:拖拽操作要求两个文件的顺序无关,工具会自动识别 .tar 和 .json 扩展名。
假设你已拥有以下文件:
镜像名.tar(原始镜像)info.json(从同一镜像 inspect 导出)
执行命令:
cargo run -- 镜像名.tar info.json输出示例:
开始处理镜像...
已成功读取镜像信息
正在裁剪镜像
镜像已完成裁剪,默认生成在与原镜像相同目录...
请按回车继续
生成的裁剪镜像为 镜像名_trimmed.tar,可直接通过 docker load 加载。
docker-image-tool/
├── Cargo.toml # 项目依赖与元数据
├── Cargo.lock # 依赖锁文件
├── DESIGN.md # 设计目标与思路
└── src/
├── main.rs # 主程序入口
└── cli/
├── mod.rs # CLI 模块声明
└── command.rs # 命令行参数定义
我们欢迎任何形式的贡献!请遵循以下流程:
- 提交 Issue:在发起 Pull Request 前,建议先开 Issue 讨论变更内容,确保与项目方向一致。
- 代码风格:遵循 Rust 官方编码规范,使用
cargo fmt格式化代码。 - 测试覆盖:新增功能请附带相应的测试用例,确保代码质量。
- 提交 PR:描述变更动机、测试结果,并关联相关 Issue。
本项目采用 Unlicense 许可证,即公共领域(public domain)许可。这意味着您可以自由地复制、修改、分发和使用本软件,无论是用于商业还是非商业目的,无需任何许可或授权。
有关完整的法律文本,请参阅项目根目录下的 LICENSE 文件。
简单来说:
- 您可以自由使用、修改、分发本软件
- 无需保留版权声明
- 不提供任何担保
- 作者不对任何后果负责
提示:本工具仍在积极开发中,欢迎反馈与建议!