一个动辄 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「镜像分层设计」。