速查·镜像瘦身与体积优化实战 一个动辄 20GB 的镜像,拉取慢、存储贵、上线慢。本条给镜像瘦身的实战速查。 瘦身手段优先级 多阶段构建(最有效):用 builder 阶段编译,runtime 阶段只拷贝产物。能把镜像从 GB 级降到百 MB 级。 选更小的基础镜像: 比 小很多, 更小但有兼容性问题(glibc vs musl),大模型场景慎用 alpine。 清理缓存和残留:包管理器缓存、pip 缓存、临时文件,装完就删。 不要把数据和权重打进镜像:模型权重用挂载或对象存储,别 bake 进镜像——一个 7B 模型权重 13GB,打进镜像就是 13GB 的浪费。
一个动辄 20GB 的镜像,拉取慢、存储贵、上线慢。本条给镜像瘦身的实战速查。
python:3.11-slim 比 python:3.11 小很多,alpine 更小但有兼容性问题(glibc vs musl),大模型场景慎用 alpine。# builder 阶段 FROM python:3.11-slim AS builder WORKDIR /build COPY requirements.txt . RUN pip install --user --no-cache-dir -r requirements.txt # runtime 阶段(最终镜像) FROM python:3.11-slim COPY --from=builder /root/.local /root/.local COPY app/ /app/ WORKDIR /app ENV PATH=/root/.local/bin:$PATH CMD ["python", "main.py"]
runtime 阶段只拷贝了 pip 安装的包和 app 代码,没有 builder 阶段的编译工具和缓存,镜像大幅缩小。
用 docker history <image> 查看每一层的大小,找出体积大户。用 dive 这个工具能可视化分析镜像每层内容。
详细原理见正文第二章 2.1「镜像分层设计」。