Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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_Arm_Dockerfile_Tensorflow Lite - Fatal编程技术网

带有Python模块的Docker容器变得太大

带有Python模块的Docker容器变得太大,python,docker,arm,dockerfile,tensorflow-lite,Python,Docker,Arm,Dockerfile,Tensorflow Lite,我希望我的Docker容器在python脚本中使用tensorflow lite(tflite)。我的Dockerfile如下所示: FROM arm32v7/python:3.7-slim-buster COPY model.tflite / COPY docker_tflite.py / COPY numpy-1.20.2-cp37-cp37m-linux_armv7l.whl / RUN apt-get update \ && apt-get -y install

我希望我的Docker容器在python脚本中使用tensorflow lite(tflite)。我的Dockerfile如下所示:

FROM arm32v7/python:3.7-slim-buster
COPY model.tflite /
COPY docker_tflite.py /
COPY numpy-1.20.2-cp37-cp37m-linux_armv7l.whl /
RUN apt-get update \
    && apt-get -y install libatlas-base-dev
RUN pip install numpy-1.20.2-cp37-cp37m-linux_armv7l.whl \
    && pip install --no-build-isolation --extra-index-url https://google-coral.github.io/py-repo/ tflite_runtime

CMD ["python", "docker_tflite.py"]
Docker容器对于197MB的微控制器来说太大了,有没有办法让它变小


更新:

根据Itamar的回答,我调整了我的Dockerfile:

FROM arm32v7/python:3.7-slim-buster as dev
COPY model.tflite /
COPY docker_tflite.py /
COPY numpy-1.20.2-cp37-cp37m-linux_armv7l.whl /
RUN apt-get update \
    && apt-get -y install libatlas-base-dev
RUN pip install --user numpy-1.20.2-cp37-cp37m-linux_armv7l.whl \
    && pip install --user --no-build-isolation --extra-index-url https://google-coral.github.io/py-repo/ tflite_runtime


FROM arm32v7/python:3.7-slim-buster as runtime
COPY model.tflite /
COPY docker_tflite.py /
COPY --from=dev /root/.local /root/.local
RUN apt-get update \
    && apt-get -y install libatlas-base-dev

CMD ["python", "docker_tflite.py"]

同时Docker容器的容量为179MB,这已经是一个进步,非常感谢。在我的Dockerfile中,例如在apt get语句中,是否还有其他优化潜力?

您将得到两份numpy:wheel和已安装版本。解决这个问题的方法是使用多阶段构建,其中第二阶段没有轮子、开发头或任何其他不必要的构建文件

FROM arm32v7/python:3.7-slim-buster as dev
# ...
RUN pip install --user numpy.whl && pip install --user --no-build-isolation ...

FROM arm32v7/python:3.7-slim-buster as runtime
COPY --from=dev /root/.local /root/.local

差不多吧。请参见

缩小安装有许多选项:

  • 您可以使用PyInstaller进行构建,并且只在没有python的图像上安装工件。您将获得“二进制文件”,并且只获得运行应用程序所需的工件。如果您使用python在构建器映像上构建它,然后将工件复制到生成的映像中,它可能会对该映像的大小产生很大影响,尤其是该映像的大小,例如,alpine bare或busybox映像
  • 您还可以将
    --no install recommendants
    添加到apt get命令中,以不遵循所有DEP
  • 具有一个构建器图像和一个目标图像的多阶段图像。构建器映像可以是构建所需的大小,目标映像可以是尽可能小的,并且只复制所需的最终构建
  • 3.7-slim-stretch
    已经比slim-buster小了几Mb
  • 将此添加到您的RUN命令
    &&apt get clean&&rm-rf/var/lib/apt/lists/*/tmp/*/var/tmp/*
    中,以便在您完成后进行清理
  • 等等
我不知道影响是否会大到足以减少到120Mb.:-)


^^^更改为拉伸并添加了apt get clean内容

非常感谢您的回答。它是可行的,但目前只小了10%。你能检查我更新的问题是否有更多的优化潜力吗?或者你可以删除文件。删除文件不会使图像变小。Docker使用层,层是可添加的,因此在第1层添加一个文件,然后在第2层删除它不会使整个图像变小(很像Git history包含所有更改)。预期大小是多少?@JRichardsz I如果容器的大小为120 MB,请执行一些命令以获取文件夹和文件大小的详细信息。把日志附在你的问题上。
FROM arm32v7/python:3.7-slim-buster as dev
COPY model.tflite /
COPY docker_tflite.py /
COPY numpy-1.20.2-cp37-cp37m-linux_armv7l.whl /
RUN apt-get update \
    && apt-get -y install libatlas-base-dev
RUN pip install --user numpy-1.20.2-cp37-cp37m-linux_armv7l.whl \
    && pip install --user --no-build-isolation --extra-index-url https://google-coral.github.io/py-repo/ tflite_runtime


FROM arm32v7/python:3.7-slim-stretch as runtime
COPY model.tflite /
COPY docker_tflite.py /
COPY --from=dev /root/.local /root/.local
RUN apt-get update \
    && apt-get -y install libatlas-base-dev \
    && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

CMD ["python", "docker_tflite.py"]