Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 机器学习工具Docker图像大小问题_Python_Docker_Dockerfile - Fatal编程技术网

Python 机器学习工具Docker图像大小问题

Python 机器学习工具Docker图像大小问题,python,docker,dockerfile,Python,Docker,Dockerfile,我需要一个docker容器,上面安装了以下软件包,用于某种计算分析。下面列出的包位于requirements.txt文件中 boto3 = "*" nltk ="*" pandas = "*" scikit-learn = "*" sentence_transformers = "*" spacy = {extras = ["lookups"],version = "

我需要一个docker容器,上面安装了以下软件包,用于某种计算分析。下面列出的包位于requirements.txt文件中

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缓存
运行apt安装后,请执行以下操作:
rm-rf/var/lib/apt/lists/*
,例如

RUN apt-get update && apt-get install -y \
        ca-certificates \
        netbase \
    && rm -rf /var/lib/apt/lists/*
不是:
  • 不建议安装
无安装建议意味着:不要安装非必需的依赖项软件包

  • 删除中间软件
鸡蛋:

有些软件,如gcc,只在安装某些软件时使用,我们可以在安装完成后将其删除

  • pip不使用缓存
鸡蛋:

  • 下载和删除比复制更好
我不确定。他们从别人的Dockerfile下载文件,并在一次
运行
后将其删除,而不是在其中复制文件

  • 不将模型数据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