删除docker中前一层添加的内容
我正在努力缩小我的docker图像的大小。 在我的docker文件中,我这样做:
FROM crystal/centos MAINTAINER crystal ADD ./rpms/test.rpm ./rpms/ RUN yum -y --nogpgcheck localinstall /rpms/test.rpm
据我所知,ADD命令是在自己的层,然后运行在另一层。 所以在我安装rpm之后,我该如何去删除初始/rpms
目录。
使用这种技术
RUN curl http://someaddress/test.rpm &&\ yum -y --nogpgcheck localinstall /rpms/test.rpm &&\ rm test.rpm
你不能删除以前的图层数据。 如果/rpms/
文件夹非常庞大,并且绝对不希望将其数据存放在您的泊坞窗图像中,则至less有两个解决scheme:
- 不要
ADD
数据(因为它会提交一个图层),而是使用单个RUN
指令来:- 下载rpm文件
- 安装rpm文件
- 删除rpm文件
- 事后平整你的形象
你可以做
RUN rm -rf /rpms
这将使最终的联盟文件系统更小。 也就是说,df会报告更less的使用情况。 这当然不会使图像数据库变小,而是稍微大一点。 如果你想避免使数据库变大,你可以创build自己的yum版本库,然后直接从那里安装。 这有明显的缺点,它不会被任何人无法访问你的百胜回购重现。
有关将docker镜像安装到主机文件系统的问题,我已经介绍了docker如何存储镜像的一些内部结构。 你可以参考这个问题是否有可能挂载一个泊坞窗图像,然后作为一个普通的目录或挂载的设备访问它(RO)?
对于AUFSgraphics驱动程序,docker(至less在版本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/
。
注意:我没有尝试这个。 这可能不适合你,甚至可能是危险的。