关于从Dockerfile构建一个小的docker镜像

问题描述 投票:1回答:2

所有,我正在尝试构建一个Docker镜像,以在具有OS yocto的嵌入式系统中运行我的python 2 App。由于嵌入式系统闪存有限,我想拥有一个小型Docker镜像。但是,在我安装了所有python和其他软件包之后,我得到了一个730M的图像,这对我来说太大了。我不知道如何压缩图像。请分享你的智慧。

谢谢!!

我的Dockerfile如下所示:

FROM *****/base-rootfs:yocto-2.1.1
RUN opkg update
RUN opkg install *****toolchain
RUN opkg install python-pip
RUN opkg install python-dev
RUN opkg install python
RUN pip install numpy
RUN pip install pandas
RUN pip install scipy
RUN pip install sklearn
COPY appa /opt/app/
RUN chmod 777 /opt/app/main.py
CMD ["python", "./opt/app/main.py"]
docker dockerfile packages yocto
2个回答
1
投票

问:如何减小docker镜像的大小?

答:有几种方法可以做到这一点。我可以立即从您的Dockerfile中发现的最突出的事情是您使用单独的RUN命令安装软件包。

虽然这可以使您的代码看起来更清晰,但每个RUN语句的大小开销,因为docker镜像是从layers构建的。

对于码头工人来说,每个RUN语句就像是从前一个构建一个新的layer并将其包裹在前一个layers周围。

如果通过将软件包捆绑到单个安装命令来减少pip的数量,我认为您应该看到大小下降。也许尝试将opkg组合在一起,将docker@default:~Example>> docker history {image-name}:{image-tag} docker@default:~$ docker history mysql IMAGE CREATED CREATED BY SIZE COMMENT 5195076672a7 5 weeks ago /bin/sh -c #(nop) CMD ["mysqld"] 0B <missing> 5 weeks ago /bin/sh -c #(nop) EXPOSE 3306/tcp 0B <missing> 5 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry⦠0B <missing> 5 weeks ago /bin/sh -c ln -s usr/local/bin/docker-entryp⦠34B <missing> 5 weeks ago /bin/sh -c #(nop) COPY file:05922d368ede3042⦠5.92kB <missing> 5 weeks ago /bin/sh -c #(nop) VOLUME [/var/lib/mysql] 0B <missing> 5 weeks ago /bin/sh -c { echo mysql-community-server m⦠256MB <missing> 5 weeks ago /bin/sh -c echo "deb http://repo.mysql.com/a⦠56B <missing> 5 weeks ago /bin/sh -c #(nop) ENV MYSQL_VERSION=5.7.21-⦠0B <missing> 5 weeks ago /bin/sh -c #(nop) ENV MYSQL_MAJOR=5.7 0B <missing> 5 weeks ago /bin/sh -c set -ex; key='A4A9406876FCBD3C45⦠23kB <missing> 5 weeks ago /bin/sh -c apt-get update && apt-get install⦠44.7MB <missing> 5 weeks ago /bin/sh -c mkdir /docker-entrypoint-initdb.d 0B <missing> 5 weeks ago /bin/sh -c set -x && apt-get update && apt-⦠4.44MB <missing> 5 weeks ago /bin/sh -c #(nop) ENV GOSU_VERSION=1.7 0B <missing> 5 weeks ago /bin/sh -c apt-get update && apt-get install⦠10.2MB <missing> 5 weeks ago /bin/sh -c groupadd -r mysql && useradd -r -⦠329kB <missing> 5 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B <missing> 5 weeks ago /bin/sh -c #(nop) ADD file:e3250bb9848f956bd⦠55.3MB docker@default:~$ 组合成另一组。


0
投票

您可以使用docker history命令查看哪个层导致更多磁盘空间添加。

qazxswpoi

根据输出,您可以查看并比较结果与这些包的实际大小,并最终深入了解导致如此巨大的docker镜像的原因?

© www.soinside.com 2019 - 2024. All rights reserved.