我想減少 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"]
uj5u.com熱心網友回復:
你的起始影像已經是 73MB,所以你永遠不會打敗它。如果您只想使用 python 3.9 運行,我建議使用python image的slim版本之一,除非您有充分的理由想要使用自己的編譯版本。
如果您真的需要編譯自己的版本:我認為與基本 centos 映像相比,您的最終階段如此之大的主要原因是因為您在編譯期間從未洗掉所需的依賴項。這在最后階段仍然會影響您,因為您復制了 gcc、git、tmux 等的所有可執行檔案。給你帶COPY --from=build /usr/local/ /usr/local/線的新舞臺。因此,在編譯后,您應該卸載用于編譯的所有軟體包,或者僅將/usr/local/bin/python3.9構建階段中的包復制到最后階段
uj5u.com熱心網友回復:
它可能不適合您的用例,但您可以嘗試使用python distroless。影像大小僅為 54.2 MB,您可以將其用作基本影像。
FROM gcr.io/distroless/python3
...
如 distroless檔案中所述
“Distroless”映像僅包含您的應用程式及其運行時依賴項。它們不包含您希望在標準 Linux 發行版中找到的包管理器、shell 或任何其他程式。
我不知道你為什么使用 centos 作為基礎映像或構建 python 本身(當然有一個很好的理由)。但是,如果必須滿足這些要求,則此解決方案可能不適合您,因為影像中沒有安裝 SO 東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/348804.html
