我尝试缩小我的docker图像的大小。在我的docker文件中,我这样做:
FROM crystal/centos MAINTAINER crystal ADD ./rpms/test.rpm ./rpms/ RUN yum -y --nogpgcheck localinstall /rpms/test.rpm
据我所知,ADD命令在它自己的层中,然后RUN在另一层中。那么在我安装rpm之后,我如何着手删除初始的/rpms目录呢?
/rpms
n53p2ov01#
使用此技术
RUN curl http://someaddress/test.rpm &&\ yum -y --nogpgcheck localinstall /rpms/test.rpm &&\ rm test.rpm
q7solyqu2#
你不能从以前的图层中删除数据。如果/rpms/文件夹很大,你绝对不希望它的数据出现在你的docker图像中,你至少有两个解决方案:
/rpms/
ADD
RUN
mftmpeh83#
你可以做
RUN rm -rf /rpms
这将使最终的union文件系统更小。也就是说,df将报告更少的使用。当然,它不会使图像数据库更小,而是稍微大一些。如果你想避免使你的数据库更大,你可以创建你自己的yum存储库并直接从那里安装。这有一个明显的缺点,那就是任何没有访问你的yum存储库的人都不能复制它。
a0zr77ik4#
在关于挂载docker镜像到主机文件系统的问题中,我已经介绍了docker如何存储镜像的一些内部结构。对于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/中删除相应目录。
/var/lib/docker/aufs/diff/
注意:我没有尝试过。这可能对您不起作用,甚至可能有危险。
4条答案
按热度按时间n53p2ov01#
使用此技术
q7solyqu2#
你不能从以前的图层中删除数据。如果
/rpms/
文件夹很大,你绝对不希望它的数据出现在你的docker图像中,你至少有两个解决方案:ADD
操作(因为它将提交一个层),而是使用单个RUN
指令执行以下操作:mftmpeh83#
你可以做
这将使最终的union文件系统更小。也就是说,df将报告更少的使用。当然,它不会使图像数据库更小,而是稍微大一些。如果你想避免使你的数据库更大,你可以创建你自己的yum存储库并直接从那里安装。这有一个明显的缺点,那就是任何没有访问你的yum存储库的人都不能复制它。
a0zr77ik4#
在关于挂载docker镜像到主机文件系统的问题中,我已经介绍了docker如何存储镜像的一些内部结构。
对于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/
中删除相应目录。注意:我没有尝试过。这可能对您不起作用,甚至可能有危险。