Docker和pip安装:避免在已安装某些软件包时安装所有软件包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker和pip安装:避免在已安装某些软件包时安装所有软件包相关的知识,希望对你有一定的参考价值。
我正在使用docker compose来构建Python项目的堆栈。这是一个处理要求的dockerfile
片段。
# Requirements are installed here to ensure they will be cached.
COPY ./requirements /requirements
RUN pip install --no-cache-dir -r /requirements/production.txt
&& rm -rf /requirements
使用该配置,我可以缓存需求,但是当我修改production.txt
(例如更新甚至单个软件包)时,Docker会重新安装所有内容。
我知道Docker需要创建一个新的容器,但有没有办法避免重新安装所有内容,但只安装必要的东西?
在这种情况下,不,没有办法避免重新安装production.txt
中的所有内容。
来自official docs,在Leverage build cache
部分:
对于ADD和COPY指令,将检查映像中文件的内容,并为每个文件计算校验和。在这些校验和中不考虑文件的最后修改时间和最后访问时间。在高速缓存查找期间,将校验和与现有映像中的校验和进行比较。如果文件中的任何内容(例如内容和元数据)发生了任何更改,则缓存将失效
由于您更改了production.txt
,因此缓存无效并且docker从先前有效的层启动并安装所有内容。
现在,如果您有多个requirements.txt
文件,您可以通过执行单独的复制和安装步骤来利用一些缓存:
COPY requirements1.txt
RUN pip install --no-cache-dir -r requirements1.txt
COPY requirements2.txt
RUN pip install --no-cache-dir -r requirements2.txt
这可能有其他缺点,但它可以让你通过在requirements1.txt
中放置不太可能更新的长寿命包和requirements2.txt
中不太稳定的包来部分减少重新安装时间。然后更改requirements2.txt
只会导致重新安装这些要求。
以上是关于Docker和pip安装:避免在已安装某些软件包时安装所有软件包的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Visual C ++ 14.0需要在已安装Visual Studio 2017的地方安装
如何在 Ubuntu 上通过 pip 安装 python3 版本的软件包?