centos Cent操作系统Python Dockerfile图像大小缩减

nbnkbykc  于 2022-11-07  发布在  Python
关注(0)|答案(2)|浏览(116)

我想为CentOS Python 3.9减小Docker映像大小。
早些时候我的图像大小是2.4GB,后来我实现了多阶段。它下降到1.1GB。
仍然有任何空间来减少图像的大小吗?我的代码文件大小是19MB。
下面是我的Docker文件:

FROM    centos:7 AS base

FROM        base AS build

ARG         PYTHON_VERSION="3.9.5"

# Install all dependenticies

RUN yum -y update \
    && yum install -y -y sox gcc \
    openssl-devel bzip2-devel libffi-devel zlib-devel \
    cairo-devel dejavu-sans-fonts libxml2-devel \
    libxslt-devel libxml2-devel libxslt-devel \
    yum-utils curl git tmux emacs-nox make xz-devel wget

# compile 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 && \
        make altinstall && \
        cd && \
        rm -rf ${DIR}
FROM base
ENV         LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
COPY --from=build /usr/local/ /usr/local/

# Copy Code

COPY . /app/
WORKDIR /app
EXPOSE 8887
RUN /usr/local/bin/python3.9 -m pip install --upgrade pip \
    && pip3 install wheel && pip3.9 install -r requirements.txt
ENTRYPOINT ["python3.9"]
CMD ["app.py"]
tez616oj

tez616oj1#

你的初始映像已经是73MB了,所以你永远都不会超过它。如果你只想运行python 3.9,我建议你使用slim版本的python image,除非你有很好的理由使用你自己编译的版本。
如果您确实需要编译自己的版本:我认为最后一个阶段之所以比基本的centos映像要大,主要是因为在编译过程中你从来没有删除过所需的依赖项。这仍然会影响到你的最后一个阶段,因为你用COPY --from=build /usr/local/ /usr/local/行将所有的gcc,git,tmux等可执行文件复制到了新的阶段。所以在编译后你应该卸载所有用于编译的软件包,或者只是将/usr/local/bin/python3.9从构建阶段复制到最终阶段

qij5mzcb

qij5mzcb2#

它可能不适合您的用例,但您可以尝试一下python distroless。映像大小仅为54.2 MB,您可以将其用作基础映像。

FROM gcr.io/distroless/python3
...

如无失真documentation中所述
“无干扰”映像只包含您的应用程序及其运行时依赖项。它们不包含软件包管理器、shell或任何其他您希望在标准Linux发行版中找到的程序。
我不知道你为什么要使用centos作为基础映像或者构建python本身(当然有很好的理由)。但是如果这些要求是必须的,这个解决方案可能不适合你,因为映像中没有安装SO的东西。

相关问题