[英]Removing pip cache after installing dependencies in Docker image
我注意到 docker 图像可能很大,因为在 /root/.cache/pip 中保留了/root/.cache/pip
缓存。 我知道在我的 docker 图像中安装所有依赖项后,我可以删除此目录。 我不确定这与 docker 的 BuildKit 有什么关系,它允许通过使用缓存更快地安装。 这两者有某种关联吗? 因此,如果我想从 BuildKit 中受益,删除/root/.cache/pip
是否安全? 我的问题是由重 python 依赖项引起的,例如 torch 和 nvidia,它们可能占用很少的 GB。 删除 pip 缓存可能会使图像大小减少 2-3 GB。
这里更好的解决方案是首先不要缓存包(无论如何你都不需要它们;图像构建过程不会从它们中受益,除非你正在做一些糟糕的事情)。
最简单的解决方案是将--no-cache-dir
传递给您的pip
调用,它不会首先将包缓存到磁盘。 或者,您可以删除包含以下内容的pip.conf
:
[global]
no-cache-dir = True
到容器中的/etc/pip.conf
以全局禁用它(无需每次都通过开关)。 请注意,如果您的图像附带pip
之前的 pip 版本,则pip.conf
解决方案存在错误; 如果是这种情况,您可以手动使用--no-cache-dir
命令行开关将 pip 更新到pip
后版本,然后修改/etc/pip.conf
以根据需要添加额外的行。
奖励:您可能希望将pip.conf
扩展为:
[install]
compile = no
[global]
no-cache-dir = True
其中compile = no
告诉pip
不要在安装时将 Python 源文件编译为字节码; 预编译字节码的好处是(稍微)更快的启动,但是通过膨胀你的图像,下载/运行它需要更长的时间,所以 Docker 层的成本超过了 Python 启动本身的任何节省。
最后补充:
ENV PYTHONDONTWRITEBYTECODE=1
到文件顶部附近的Dockerfile
(可以与其他ENV
设置结合使用以避免额外的层)。 pip.conf
阻止在安装时编译/写入字节码,环境变量阻止在运行时写入它们(这将是毫无意义的练习;当容器退出时,字节码无论如何都会丢失)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.