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

如何进一步缩减TensorFlow相关Docker镜像体积?

问题描述

本地运行的Dash应用可正常工作,该应用借助TensorFlow和Ultralytics的YOLO8实现图表事件检测,现尝试将其部署至服务器的Docker容器中。最初基于tensorflow:latest-gpu镜像构建的镜像大小为19.5GB,移除-gpu标签后缩减至14GB,随后改用python:3.11.0镜像构建,大小为13GB。

应用及资源文件夹仅约6MB,但13GB的镜像体积过大,请问如何进一步缩减镜像大小?

现有Dockerfile

#Using python
FROM python:3.11.0
COPY requirements.txt ./requirements.txt
# install opencv dependencies and requirements
RUN apt-get update && apt-get install ffmpeg libsm6 libxext6  -y && pip install -r requirements.txt --ignore-installed
#Copy files to container
COPY . ./
#Running APP and doing some PORT Forwarding
CMD gunicorn -b 0.0.0.0:1312 app:server

requirements.txt

dash==2.16.1
dash-core-components==2.0.0
dash-daq==0.5.0
dash-html-components==2.0.0
dash-table==5.0.0
gunicorn==21.2.0
influxdb-client==1.41.0
keras==3.0.5
numpy==1.26.4
opencv-python==4.9.0.80
pandas==2.2.1
pillow==10.2.0
plotly==5.20.0
tensorflow==2.16.1
ultralytics==8.1.27
kaleido

镜像缩减方案

1. 切换轻量基础镜像

替换python:3.11.0为python:3.11.0-slim(Debian精简版,体积约200MB)或python:3.11.0-alpine(基于musl libc,体积约100MB),直接砍掉基础镜像的冗余内容。示例:

FROM python:3.11.0-slim

2. 清理APT缓存并精简依赖安装

在apt-get install后立即清理缓存,同时用--no-install-recommends跳过非必需依赖,合并命令减少镜像层数:

RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg libsm6 libxext6 \
    && rm -rf /var/lib/apt/lists/*

3. 优化PIP安装流程

  • 加上--no-cache-dir参数,避免pip缓存安装包:
    RUN pip install --no-cache-dir -r requirements.txt --ignore-installed
    
  • 清理冗余依赖:TensorFlow 2.16已内置Keras,可直接移除keras==3.0.5;若应用不需要静态图导出,可移除kaleido。

4. 采用多阶段构建

将构建环境与运行环境分离,仅复制运行必需的文件和依赖到最终镜像,避免构建残留文件占用空间:

# 第一阶段:构建依赖
FROM python:3.11.0-slim as builder
COPY requirements.txt .
RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg libsm6 libxext6 \
    && rm -rf /var/lib/apt/lists/* \
    && pip install --user --no-cache-dir -r requirements.txt

# 第二阶段:运行镜像
FROM python:3.11.0-slim
COPY --from=builder /root/.local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
COPY . ./
CMD gunicorn -b 0.0.0.0:1312 app:server

5. 使用TensorFlow精简版本

若不需要GPU支持,替换tensorflow==2.16.1为tensorflow-cpu==2.16.1;针对Intel CPU环境,可改用tensorflow-intel,减少GPU相关冗余依赖。

6. 排除本地冗余文件

添加.dockerignore文件,排除不需要复制到容器的开发文件:

.git
__pycache__
*.pyc
*.pyo
venv
.env
*.log

7. 精简Ultralytics依赖

Ultralytics默认安装大量可选依赖,改用ultralytics[core]仅安装核心功能:

ultralytics[core]==8.1.27

内容的提问来源于stack exchange,提问作者The Governor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 19:28:12