全部, 我正在尝试构建一个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"]
答案 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:~$
根据输出,您可以查看并比较结果与这些包的实际大小,并最终深入了解导致如此巨大的泊坞窗图像的原因?