Python 机器学习工具Docker图像大小问题
我需要一个docker容器,上面安装了以下软件包,用于某种计算分析。下面列出的包位于requirements.txt文件中Python 机器学习工具Docker图像大小问题,python,docker,dockerfile,Python,Docker,Dockerfile,我需要一个docker容器,上面安装了以下软件包,用于某种计算分析。下面列出的包位于requirements.txt文件中 boto3 = "*" nltk ="*" pandas = "*" scikit-learn = "*" sentence_transformers = "*" spacy = {extras = ["lookups"],version = "
boto3 = "*"
nltk ="*"
pandas = "*"
scikit-learn = "*"
sentence_transformers = "*"
spacy = {extras = ["lookups"],version = "*"}
streamlit = "*"
tensorflow = "*"
unidecode = "*"
我已经为这个东西写了一个Docker文件,这里我面临的问题是Docker图像的大小,大约是6GB(确切地说是6.42)。有人能帮我解决这个问题吗?我如何缩小Docker图像的大小
这是DockerFile
FROM python:3.7-slim-buster as base
ENV PYTHONUNBUFFERED=TRUE
ENV PYTHONDONTWRITEBYTECODE=TRUE
ENV PATH="/opt/program:${PATH}"
COPY . /opt/program
WORKDIR /opt/program/
RUN chmod +x train
# Install dependencies
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get autoremove -y \
&& apt-get install -y \
gcc \
build-essential \
zlib1g-dev \
wget \
unzip \
cmake \
python3-dev \
gfortran \
libblas-dev \
liblapack-dev \
libatlas-base-dev \
&& apt-get clean
# Install Python packages
RUN pip install --upgrade pip \
&& pip install \
ipython[all] \
nose \
matplotlib \
pandas \
scipy \
sympy \
&& rm -fr /root/.cache
RUN pip install --install-option="--prefix=/install" -r requirements.txt
你在图片中安装了很多东西,所以不管怎样它都会变得很大,但是你可以做一些事情 次要的一个-在通过apt安装完东西后,删除
/var/lib/apt/lists/*
RUN rm -rf /var/lib/apt/lists/*
主要的一个——从Dockerfile的内容来看,我猜它是用来训练一个需要训练数据的模型的,这可能会占用很多空间,因为你要把所有的东西都复制到图像中。这些数据不需要出现在映像中,而是需要加载到从映像构建的容器中
与其将所有内容复制到映像中,不如复制仅用于运行逻辑但以其他方式加载数据的文件。其中一种方法是将数据绑定到映像中。您可以将数据存储在一个单独的文件夹中,比如说/data
,并将此文件夹包括在.dockrignore
文件中(这样它就不会被复制)。然后,根据启动容器的方式,可以指定绑定装载,例如
docker container run -v ./data:/<path-inside-image> ...
docker容器运行-v./data:/。。。
将
替换为数据应该位于的路径,但注意不要装载到已经包含一些基本文件的目录,因为这些文件将被装载的文件夹遮挡
如果使用绑定挂载对您来说不是一个可行的解决方案,那么您需要找到更好的方法将数据加载到容器中,例如,在容器运行后,从internet或其他网络连接的存储中提取数据。从其他人的Dockerfile或文档中获取一些方法:
- 删除apt缓存
rm-rf/var/lib/apt/lists/*
,例如
RUN apt-get update && apt-get install -y \
ca-certificates \
netbase \
&& rm -rf /var/lib/apt/lists/*
不是:
- 不建议安装
- 删除中间软件
- pip不使用缓存
- 下载和删除比复制更好
运行后将其删除,而不是在其中复制文件
- 不将模型数据docker到图像中
如果您使用tensorflow或其他AI应用程序,您可能会有一些模型数据(大小为几克),更好的方法是在容器中运行时下载它,或者通过ftp、对象存储或其他方式—不是在映像中,而是装载或下载
- 注意.git文件夹
根据我的经验。如果您使用git来控制代码。.git
文件夹可能非常大。命令COPY/XXX
将把.git
复制到图像中。找到一种方法来过滤.git
。供我使用:
FROM apline:3.12 as MID
COPY XXX /XXX/
COPY ... /XXX/
FROM image:youneed
COPY --from=MID /XXX/ /XXX/
RUN apt-get update && xxxxx
CMD ["python","app.py"]
或者使用.dockrignore
从以下位置获取以上信息:
在您的Dockerfile中
当然,通过这种方式,您可能会得到一个更小的图像,但docker构建过程将不使用docker的缓存。因此,在您尝试查找可以删除的软件时,将其拆分为两个或三个命令运行
,以使用更多docker缓存
希望能帮助你
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
netbase \
&& rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
g++ \
&& pip install cython && apt-get remove -y gcc g++ \
&& rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir -r requirements.txt
FROM apline:3.12 as MID
COPY XXX /XXX/
COPY ... /XXX/
FROM image:youneed
COPY --from=MID /XXX/ /XXX/
RUN apt-get update && xxxxx
CMD ["python","app.py"]
# Did wget,cmake and some on is necessary?
COPY . /opt/program
WORKDIR /opt/program/
# Install dependencies
RUN chmod +x train && apt-get update \
&& apt-get upgrade -y \
&& apt-get autoremove -y \
&& apt-get install -y \
gcc \
build-essential \
zlib1g-dev \
wget \
unzip \
cmake \
python3-dev \
gfortran \
libblas-dev \
liblapack-dev \
libatlas-base-dev \
&& apt-get clean && pip install --upgrade pip \
&& pip install --no-cache-dir \
ipython[all] \
nose \
matplotlib \
pandas \
scipy \
sympy \
&& pip install --no-cache-dir --install-option="--prefix=/install" -r requirements.txt
&& apt-get remove -y gcc unzip cmake \ # just have a try,to find what software we can remove.
&& rm -rf /var/lib/apt/lists/*
&& rm -fr /root/.cache