首选python:3.11-slim镜像,体积120–150MB、兼容性好、构建快;慎用alpine因C扩展兼容性风险;pip安装须加--no-cache-dir并分离requirements.txt复制与安装步骤,配合.dockerignore精简上下文。

python:3.11-slim 是最直接可用的起点,不是必须自己编译或从 Alpine 手动装起。
选对基础镜像:别用 python:3.11,优先考虑 slim 或 alpine
官方 python:3.11 镜像基于 Debian,体积常超 1GB;而 python:3.11-slim 去掉了文档、调试工具等非运行必需组件,体积通常在 120–150MB 左右,兼容性好、构建快、适合大多数 Web/CLI 应用。
python:3.11-alpine 更小(~50MB),但要注意:
- C 扩展编译可能失败(如 numpy、cryptography 默认不提供 wheel)
- glibc 依赖的包(如某些二进制绑定)会报 Symbol not found 错误
- 时间区、字符集需手动配置(ENV TZ=Asia/Shanghai LANG=C.UTF-8)
除非你明确需要极致体积且已验证所有依赖兼容,否则首推 python:3.11-slim。
RUN pip install 必须加 --no-cache-dir,且顺序不能错
Docker 层缓存只在指令内容完全一致时生效。把 COPY requirements.txt 和 RUN pip install 拆成两步,才能让依赖安装层独立缓存——改代码不影响重装依赖。
立即学习“Python免费学习笔记(深入)”;
常见错误写法:COPY . . → RUN pip install -r requirements.txt(每次改一行代码都会触发重装)
正确顺序应是:
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
COPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY . .
加 --no-cache-dir 是因为 Docker 构建时默认不复用 pip 缓存,但临时目录仍会残留,徒增镜像体积;不加它,镜像里会多出几百 MB 的 /root/.cache/pip。
避免在镜像里留 root 权限和冗余文件
生产环境不应以 root 运行应用进程。简单加固可加两行:
RUN adduser -D myuser && chown -R myuser /appUSER myuser
另外,.dockerignore 文件必不可少,否则 git 历史、__pycache__、venv、.env 全部打进镜像上下文,拖慢构建、暴露敏感信息、增大体积。
一个最小有效 .dockerignore 内容:
__pycache__/ *.pyc .git .gitignore .env venv/ .dockerignore
多阶段构建只在真需要时才用
Python 项目一般不需要多阶段构建——没有编译产物要剥离。只有当你:
- 用 cython 或 pybind11 编译了扩展模块
- 在镜像中运行了 pip-compile 或 poetry export 生成 requirements.txt
- 或依赖里含需编译的 C 库(如 lxml + libxml2-dev)
这时才值得拆成 builder + runtime 两阶段。否则硬套多阶段反而增加维护成本和构建时间。
真正省体积的关键,是别复制没用的东西、别留缓存、别用 latest 标签、别在 RUN 里做多件不相关的事(比如同时装系统包和 Python 包)。

















