Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Docker 镜像裁剪工具

一个用 Rust 编写的命令行工具,用于智能裁剪 Docker 镜像层,减小镜像体积,提升部署效率。

项目概述

在容器化部署中,Docker 镜像往往包含大量与运行环境重复的层,导致镜像体积臃肿、拉取缓慢。本工具自动裁剪掉重复层,生成一个保持完整功能但体积更小的新镜像。

  • 核心价值:减少存储与传输开销,加速 CI/CD 流水线,优化边缘场景下的镜像分发。

核心功能

  • 差异计算:使用集合运算快速找出镜像中独有(需保留)的层。
  • 智能裁剪:基于差异结果重构 tar 包,仅保留必要层,同时保持镜像结构完整。
  • 向后兼容:生成的裁剪镜像仍符合 Docker 镜像规范,可直接加载运行。

便捷使用(拖拽操作)

除了命令行方式,在 Windows 环境下你还可以通过拖拽文件来快速运行裁剪:

  1. 将编译好的 docker-image-tool.exe(位于 target/release/)复制到任意目录(例如桌面)。
  2. 同时选中镜像 tar 文件(如 image.tar)和 JSON 元数据文件(如 info.json)。
  3. 将这两个文件拖拽到 docker-image-tool.exe 图标上。
  4. 工具会自动处理,并在同级目录下生成裁剪后的镜像文件(文件名后缀为 _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  # 命令行参数定义

贡献指南

我们欢迎任何形式的贡献!请遵循以下流程:

  1. 提交 Issue:在发起 Pull Request 前,建议先开 Issue 讨论变更内容,确保与项目方向一致。
  2. 代码风格:遵循 Rust 官方编码规范,使用 cargo fmt 格式化代码。
  3. 测试覆盖:新增功能请附带相应的测试用例,确保代码质量。
  4. 提交 PR:描述变更动机、测试结果,并关联相关 Issue。

许可证

本项目采用 Unlicense 许可证,即公共领域(public domain)许可。这意味着您可以自由地复制、修改、分发和使用本软件,无论是用于商业还是非商业目的,无需任何许可或授权。

有关完整的法律文本,请参阅项目根目录下的 LICENSE 文件。

简单来说

  • 您可以自由使用、修改、分发本软件
  • 无需保留版权声明
  • 不提供任何担保
  • 作者不对任何后果负责

提示:本工具仍在积极开发中,欢迎反馈与建议!

About

对导出的镜像进行剪裁

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages