我想为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"]
2条答案
按热度按时间tez616oj1#
你的初始映像已经是73MB了,所以你永远都不会超过它。如果你只想运行python 3.9,我建议你使用
slim
版本的python image,除非你有很好的理由使用你自己编译的版本。如果您确实需要编译自己的版本:我认为最后一个阶段之所以比基本的centos映像要大,主要是因为在编译过程中你从来没有删除过所需的依赖项。这仍然会影响到你的最后一个阶段,因为你用
COPY --from=build /usr/local/ /usr/local/
行将所有的gcc,git,tmux等可执行文件复制到了新的阶段。所以在编译后你应该卸载所有用于编译的软件包,或者只是将/usr/local/bin/python3.9
从构建阶段复制到最终阶段qij5mzcb2#
它可能不适合您的用例,但您可以尝试一下python distroless。映像大小仅为54.2 MB,您可以将其用作基础映像。
如无失真documentation中所述
“无干扰”映像只包含您的应用程序及其运行时依赖项。它们不包含软件包管理器、shell或任何其他您希望在标准Linux发行版中找到的程序。
我不知道你为什么要使用centos作为基础映像或者构建python本身(当然有很好的理由)。但是如果这些要求是必须的,这个解决方案可能不适合你,因为映像中没有安装SO的东西。