我注意到,由于在/root/.cache/pip中保留pip缓存,所以坞映像可能很大。我知道在我的docker映像中安装了我所有的依赖项之后,我可以删除这个目录。我不确定这与docker的BuildKit有什么关系,它允许通过使用缓存来更快地安装。这两者之间有某种联系吗?因此,如果我想从BuildKit中受益,那么删除/root/.cache/pip安全吗?我的问题的动机是像torch和nvidia这样的沉重的python依赖关系,它们可能占用很少的GB。删除pip缓存可能会使图像的大小减少2-3 GB。
发布于 2022-11-29 15:50:35
这里更好的解决方案是,首先不要缓存包(无论如何,您不会需要它们;映像构建过程不会从它们中受益,除非您正在做一些糟糕的事情)。
最简单的解决方案是将--no-cache-dir传递给您的pip调用,它首先不会将包缓存到磁盘。或者,您可以删除包含以下内容的pip.conf:
[global]
no-cache-dir = True对容器中的/etc/pip.conf进行全局禁用(不需要每次传递交换机)。注意,如果您的映像附带了19.0.1之前的pip版本,那么pip.conf解决方案是错误的;如果是这样的话,您可以使用--no-cache-dir命令行开关手动将pip更新到后19.0.1版本,然后修改/etc/pip.conf以在需要时添加额外的行。
奖励:您可能希望将pip.conf扩展到:
[install]
compile = no
[global]
no-cache-dir = Truecompile = no告诉pip在安装时不要将pip源文件编译成字节码;预编译字节码的好处是(稍微)更快启动,但是通过放大映像,下载/运行它需要更长的时间,所以Docker层的成本超过了启动本身的任何节省。
最后,增加:
ENV PYTHONDONTWRITEBYTECODE=1到您的Dockerfile (可以与其他ENV设置结合,以避免额外的层)在文件顶部附近。如果pip.conf阻止在安装时编译/写入字节码,环境变量将阻止在运行时写入字节码(这将是一个毫无意义的练习;当容器退出时,字节码无论如何都会丢失)。
https://stackoverflow.com/questions/74616667
复制相似问题