直接用 python:3.11-slim + 多阶段构建 + 显式清理可稳定将镜像压至200mb左右;--no-cache-dir 仅跳过 pip 下载缓存,不清理 .so/.a 文件、tests/docs 目录、包管理器二进制及 __pycache__/pyc,故效果极差。

直接用 python:3.11-slim + 多阶段构建 + 显式清理,能稳定压到 200MB 左右;单独加 --no-cache-dir 几乎没用,别指望它单挑 numpy。
为什么 --no-cache-dir 单独用效果极差
它只跳过 pip 自己的下载缓存(~/.cache/pip),但完全不碰以下四类体积大户:
-
.so和.a编译产物仍完整留在site-packages里 - 每个包自带的
tests/、docs/目录照常复制 -
pip、setuptools、wheel的二进制文件仍塞在venv/bin/ - Python 默认生成的
__pycache__/和*.pyc全部保留
多阶段构建中必须手动删掉的 4 类文件
光靠 COPY --from=builder 复制整个 venv,等于把 builder 阶段所有“构建残留”全拖进最终镜像。必须在 builder 阶段末尾加清理命令:
python-docx Skill功能概述python-docx Skill是一项面向实际任务的技能,主要用于本Skill提供使用python-docx生成专业Word文档的标准方法和最佳实践;生成安全服务方案文档;核心要点生成技术架构设计文档;生成任何需要专业排版的Word文档;核心库 : python-docx;使用与执行辅助库 : docx.shared , docx.enum , docx.oxml.ns;标准代码模板;1. 文档初始化;2. 字体设置(必须!它将相关步骤、工具调用和结果整理方式集
- 删包管理器:
RUN rm -f /opt/venv/bin/pip* /opt/venv/bin/easy_install* - 删测试代码:
RUN find /opt/venv/lib/python*/site-packages -name "tests" -type d -exec rm -rf {} + 2>/dev/null || true - 删 pyc 缓存:
RUN find /opt/venv -name "__pycache__" -type d -exec rm -rf {} + - 删未声明依赖:
RUN /opt/venv/bin/python -m pip uninstall -y $(/opt/venv/bin/python -m pip freeze | grep -v -F -f requirements.txt | cut -d= -f1 | tr '\n' ' ')
别碰 alpine,除非你真查过 wheel 兼容性
Alpine 用 musl libc,而 numpy、psycopg2、tensorflow 等主流包的预编译 wheel 只支持 glibc。结果就是:
- 构建时被迫装
gcc、gfortran、musl-dev,builder 阶段膨胀到 400MB+ - 运行时报
ImportError: cannot open shared object file或 segfault,调试成本远超省下的几十 MB - PyPI 上得手动确认 wheel 名含
-musllinux_*,-manylinux_*在 Alpine 上大概率不跑
验证镜像里还藏着什么没删干净
即使做完以上所有操作,最终镜像仍可能藏有巨无霸目录。上线前务必执行:
docker run -it --rm <image> du -sh /opt/venv/lib/python*/site-packages/* | sort -hr | head -10</image>
常见漏网之鱼:numpy/.libs/ 下一堆 libgfortran-*.so(占 30–50MB)、torch/lib/ 里的冗余 CUDA stubs、甚至某个包悄悄带进来的 node_modules。这些不会被自动清理,得靠 find ... -name "*.so" -not -path "*/numpy/.libs/*" -delete 这类白名单式清理收尾。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










