带有Python模块的Docker容器变得太大
我希望我的Docker容器在python脚本中使用tensorflow lite(tflite)。我的Dockerfile如下所示:带有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
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映像
- 您还可以将
添加到apt get命令中,以不遵循所有DEP--no install recommendants
- 具有一个构建器图像和一个目标图像的多阶段图像。构建器映像可以是构建所需的大小,目标映像可以是尽可能小的,并且只复制所需的最终构建
已经比slim-buster小了几Mb3.7-slim-stretch
- 将此添加到您的RUN命令
中,以便在您完成后进行清理&&apt get clean&&rm-rf/var/lib/apt/lists/*/tmp/*/var/tmp/*
- 等等
^^^更改为拉伸并添加了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"]