CentOS 7下Python 3.9 Docker镜像体积进一步缩减方案咨询
CentOS 7 Python 3.9 Docker镜像体积优化方案
当前1.1GB的镜像还有非常大的缩减空间,按以下方案优化后普遍可以将体积压缩到200MB以内,优化核心逻辑是删除所有编译冗余、运行时冗余和缓存文件:
核心优化点
- 编译阶段裁剪Python冗余组件,移除调试符号、静态库、测试用例、文档等非必要内容
- 最终运行阶段仅安装最小必要运行时依赖,不引入任何devel编译依赖,安装完成后立刻清理yum缓存
- 拷贝编译产物时仅复制Python运行必须的二进制、动态库和标准库,而非整段拷贝整个/usr/local目录
- pip安装依赖时禁用缓存,避免安装包残留占用空间
优化后Dockerfile示例
FROM centos:7 AS base FROM base AS build ARG PYTHON_VERSION="3.9.5" # 仅安装编译依赖,安装后立刻清缓存 RUN yum -y update \ && yum install -y gcc \ openssl-devel bzip2-devel libffi-devel zlib-devel \ cairo-devel libxml2-devel \ libxslt-devel make xz-devel wget \ && yum clean all && rm -rf /var/cache/yum/* # 编译裁剪版Python RUN \ DIR=/tmp/python && \ mkdir -p ${DIR} && \ cd ${DIR} && \ wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz && \ tar xvf Python-${PYTHON_VERSION}.tgz && \ cd Python-${PYTHON_VERSION}/ && \ # 禁用静态库、移除文档字符串,裁剪非必要功能 ./configure --enable-optimizations --prefix=/usr/local --disable-static --without-doc-strings --enable-shared \ && make -j$(nproc) altinstall \ # 移除调试符号,大幅减少二进制体积 && strip /usr/local/bin/python3.9 /usr/local/lib/libpython3.9.so* \ # 删除冗余的文档、测试用例等文件 && rm -rf /usr/local/share/doc /usr/local/share/man \ && find /usr/local/lib/python3.9 -name "*.pyc" -delete \ && find /usr/local/lib/python3.9 -name "test" -o -name "tests" | xargs rm -rf \ && cd && \ rm -rf ${DIR} # 最终运行镜像阶段 FROM base ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib # 仅安装运行时需要的依赖,不引入任何devel包,安装后立刻清缓存 RUN yum install -y sox openssl bzip2 libffi zlib cairo dejavu-sans-fonts libxml2 libxslt \ && yum clean all && rm -rf /var/cache/yum/* # 仅拷贝Python运行必须的文件,避免冗余内容进入最终镜像 COPY --from=build /usr/local/bin/python3.9 /usr/local/bin/ COPY --from=build /usr/local/bin/pip3.9 /usr/local/bin/ COPY --from=build /usr/local/lib/python3.9 /usr/local/lib/python3.9/ COPY --from=build /usr/local/lib/libpython3.9.so* /usr/local/lib/ # 拷贝项目代码 COPY . /app/ WORKDIR /app EXPOSE 8887 # 安装依赖时禁用缓存,避免安装包残留 RUN /usr/local/bin/python3.9 -m pip install --no-cache-dir --upgrade pip wheel \ && pip3.9 install --no-cache-dir -r requirements.txt ENTRYPOINT ["python3.9"] CMD ["app.py"]
如果对体积有更高要求,还可以选择替换基础镜像为centos:7-minimal(仅70MB左右),或使用distroless类型的运行时基础镜像,最终体积可压缩到100MB以内。
内容的提问来源于stack exchange,提问作者Vidya
相关产品推荐
相关产品推荐

