You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker镜像体积过大(6.9GB)求助:如何优化Streamlit应用镜像?

解决Docker镜像体积过大的问题

你在MacBook M1环境下执行docker buildx build --no-cache --platform=linux/amd64 -t app:v1.0.0 .构建Streamlit应用镜像时,6.9GB的体积主要来自依赖安装层(6.73GB),可以通过以下几个方向优化:

一、清理APT缓存与冗余系统包

你的Dockerfile中安装ffmpeg libsm6 libxext6后未清理APT缓存,会额外占用数百MB空间。修改安装命令,在同一RUN指令中完成清理:

RUN pip3 install --no-cache-dir -r requirements.txt && \
    apt-get update && apt-get install -y --no-install-recommends ffmpeg libsm6 libxext6 && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

--no-install-recommends会避免安装不必要的依赖包,进一步减少体积。

二、移除不必要的Python依赖

查看你的requirements.txt,存在明显冗余:

  • 同时包含pypdf和PyPDF2,二者功能重叠,保留一个即可
  • grpcio-tools、Faker、markdown-it-py等可能是开发阶段依赖,生产环境无需安装
  • 用pipdeptree分析依赖树,找出未被直接使用的间接依赖并移除

建议先在本地环境用pip check验证依赖必要性,再精简requirements.txt。

三、删除无用的venv配置

Docker容器本身就是隔离环境,python -m venv venv完全多余,这一步会额外生成17.2MB的文件,直接删除该RUN指令即可。

四、使用多阶段构建(核心优化)

多阶段构建可以将编译/安装过程与最终运行环境分离,只保留必要的文件到最终镜像中。以下是优化后的Dockerfile:

# 第一阶段:构建依赖
FROM python:3.10.0-slim AS builder

WORKDIR /build

# 安装系统依赖(仅安装必要的编译/运行依赖)
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    ffmpeg libsm6 libxext6 \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
# 将依赖安装到指定目录,方便后续复制
RUN pip install --no-cache-dir --target=/build/deps -r requirements.txt

# 第二阶段:最终运行镜像
FROM python:3.10.0-slim

WORKDIR /app

# 复制系统依赖库(从构建阶段复制必要的二进制文件)
COPY --from=builder /usr/lib/x86_64-linux-gnu/libsm.so.6 /usr/lib/x86_64-linux-gnu/
COPY --from=builder /usr/lib/x86_64-linux-gnu/libxext.so.6 /usr/lib/x86_64-linux-gnu/
COPY --from=builder /usr/bin/ffmpeg /usr/bin/ffmpeg

# 复制Python依赖到系统site-packages目录
COPY --from=builder /build/deps /usr/local/lib/python3.10/site-packages

# 复制应用代码与配置(先复制小文件,利用Docker缓存)
COPY .env .env
COPY requirements.txt .
COPY . /app

ENV PYTHONUNBUFFERED=1
EXPOSE 8501

ENTRYPOINT ["streamlit", "run"]
CMD ["Home.py", "--server.port=8501"]

五、针对大体积依赖的专项优化

你的依赖中torch、torchvision、opencv-python、pyarrow是体积大户:

  • 若无需GPU支持,安装CPU版本:
    torch==2.2.0+cpu --index-url https://download.pytorch.org/whl/cpu
    torchvision==0.17.0+cpu --index-url https://download.pytorch.org/whl/cpu
    
  • 替换onnxruntime为onnxruntime-cpu
  • opencv-python可以替换为更小的opencv-python-headless(无需GUI支持)

六、添加.dockerignore文件

创建.dockerignore排除不必要的文件,避免COPY指令将冗余内容打包进镜像:

.git/
__pycache__/
venv/
tests/
*.log
.DS_Store

完成以上优化后,重新执行构建命令,镜像体积可大幅降低(预计能压缩到2GB以内,甚至更小,取决于依赖精简程度)。

内容的提问来源于stack exchange,提问作者Dom R.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 15:08:10