docker-slim通过动态运行应用并跟踪实际使用的文件、库和系统调用实现精准裁剪,非删层或清缓存;可将镜像压缩至原体积约1/10,Java应用从2GB压至100MB、Nginx从553MB压至50MB常见,压缩率普遍90%左右。

docker-slim 不是“强行剔除”,而是基于真实运行行为的智能裁剪。它不破坏依赖,是因为它先让容器真正跑起来、观察哪些文件被打开、哪些系统调用被执行、哪些二进制被动态加载,再只保留这些被实际用到的部分——没被调用过的,自然就是“无用”的。
运行时探针是裁剪的前提
工具必须能准确模拟生产行为,否则裁剪会误删关键资产:
- Web 类服务务必加 --http-probe,确保容器启动后至少有一次健康探测(如 GET /),触发路由初始化、中间件加载、配置读取等完整路径
- CLI 工具类镜像必须用 --cmd 指定典型命令,例如
--cmd "app --version"或--cmd "app process --input data.json",让工具捕获该执行链路下的全部依赖 - 若应用启动慢,加 --continue-after 30(单位秒),避免探针超时退出导致分析不全
手动控制二进制资产的去留
对已知必须保留但未被自动识别的二进制(如私有插件、硬件驱动封装工具),可用路径规则干预:
- --include-path /usr/local/bin/mytool:强制保留指定二进制及其直接依赖库(如 .so 文件)
- --exclude-path /usr/share/man,/usr/lib/debug:批量剔除文档、调试符号等确定无运行时价值的内容
- 多个路径用空格分隔,支持通配符,如
--exclude-path "/usr/bin/*-config"
验证是否真的没破坏依赖
瘦身不是终点,验证才是关键环节:
- 启动精简后镜像,执行和探针阶段完全一致的命令或请求,确认功能输出一致
- 检查关键路径是否存在:
docker run --rm your-image:latest.slam ls -l /usr/bin/mytool - 对比体积变化:
docker image ls | grep "your-image.*slim",通常可降至原镜像 10%–30% - 用
docker-slim build --show-cmds --target your-image查看工具实际调用了哪些命令,反向排查遗漏点
它不靠猜测,也不靠删层,靠的是运行证据。只要探针覆盖了你的核心使用场景,剔除的就是真冗余。


















