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

时间:2018-04-19 05:05:24

标签: docker dockerfile packages yocto

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

谢谢!

我的Dcokerfile如下所示:

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"]

2 个答案:

答案 0 :(得分:1)

问:如何缩小泊坞窗图片的大小?

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

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

对于泊坞窗,每个layers语句就像从前一个RUN构建一个新layer并将其包裹在前一个layers

如果通过将软件包捆绑到单个安装命令来减少pip的数量,我认为您应该看到大小下降。也许可以尝试将opkg个和Rails.application.config.action_dispatch.show_exceptions = true分组到另一个。

答案 1 :(得分:0)

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

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:~$

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