我正在尝试减小泊坞窗图像的大小。在我的docker文件中,我这样做:
FROM crystal/centos
MAINTAINER crystal
ADD ./rpms/test.rpm ./rpms/
RUN yum -y --nogpgcheck localinstall /rpms/test.rpm
据我所知,ADD命令在它自己的层中,然后RUN在另一层。因此,在安装rpm之后,如何删除初始/rpms
目录。
答案 0 :(得分:8)
使用这种技术
RUN curl http://someaddress/test.rpm &&\
yum -y --nogpgcheck localinstall /rpms/test.rpm &&\
rm test.rpm
答案 1 :(得分:4)
您无法从之前的图层中删除数据。如果/rpms/
文件夹很大并且您绝对不希望其数据出现在您的泊坞窗映像中,那么您至少有两个解决方案:
ADD
数据(因为它会提交图层),而是使用单个 RUN
指令:
答案 2 :(得分:1)
你可以做到
RUN rm -rf /rpms
这将使最终的联合文件系统更小。也就是说,df将报告较少的使用量。它当然不会使图像数据库变小,而是会略微变大。如果您想避免使数据库变大,可以创建自己的yum存储库并直接从那里安装。这有一个明显的缺点,即没有访问你的yum repo的任何人都无法重复。
答案 3 :(得分:1)
关于将docker镜像安装到主机文件系统的问题我已经介绍了docker如何存储其图像的一些内部结构。您可以参考此问题Is it possible to mount a docker image and then access it (RO) as a normal directory or mounted device?
对于AUFS图驱动程序,docker(至少在版本1.2或更高版本中)执行:
/var/lib/docker/aufs/diff
/var/lib/docker/aufs/layers/${CONTAINER_ID}
组成的图层列表。因此,如果您希望从容器中删除某个中间层,可以尝试从/var/lib/docker/aufs/layers/${CONTAINER_ID}
删除特定行,然后从/var/lib/docker/aufs/diff/
中删除相应的目录。
注意:我没试过。这可能对你不起作用,甚至可能是危险的。