我正在尝试了解docker缓存对于哪种类型的命令是危险的。
这里有一些例子,我相信会发生。
在我看来,这将始终使用缓存。我关心的?
并不是真的,因为如果以前的curl缓存安装版本使我的映像正常工作,那么它应该仍然有效:
RUN apt-get update && apt-get install --no-install-recommends -yy curl
仅当requirements.txt与以前相同时,此COPY命令才会使用缓存:
COPY ./requirements.txt /opt/client_web/requirements.txt
仅当/opt/client_web/requirements.txt的内容与以前完全相同时,此RUN命令才会缓存:否则,将不使用缓存:
RUN python3 -m pip install --default-timeout=100 -r /opt/client_web/requirements.txt
此RUN命令可能始终会缓存,并且可以。当然,如果发布了,我将不会获得更新版本的pip:
RUN curl https://bootstrap.pypa.io/get-pip.py > get-pip.py && python3 get-pip.py
以上说法正确吗?
如果是,我们可以说仅在命令不涉及文件更改的情况下才使用docker缓存吗?
RUN apt-get update && apt-get install --no-install-recommends -yy curl
除非先前的命令已经使缓存无效,否则该命令确实应该重新使用缓存。
仅当requirements.txt与以前相同时,第一个COPY命令将使用高速缓存
COPY ./requirements.txt /opt/client_web/requirements.txt
是。Docker将使用此文件的校验和来确保这一点。
仅当/opt/client_web/requirements.txt的内容与以前完全相同时,此行才会缓存。否则,它将不使用缓存。
RUN python3 -m pip install --default-timeout=100 -r /opt/client_web/requirements.txt
不完全正确,如果命令行更改,则不会重新使用缓存。仅在以下情况下才使用缓存:
COPY
使用其他文件)-在您的特定情况下,更改为requirements.txt
仅当此COPY
和之间没有指令时,您的声明才是正确的RUN
。在这两者之间放置的另一条指令可能会使缓存无效。
此外,Docker无法知道您的命令行实际上使用了该requirements.txt
文件,只有命令字符串中的更改可能会告诉Docker在此特定步骤上使缓存无效。
这可能会一直缓存,我不介意。当然,如果发布了,我将不会获得更新版本的pip:
RUN curl https://bootstrap.pypa.io/get-pip.py > get-pip.py && python3 get-pip.py
是的,除非上一条指令使高速缓存无效或命令字符串更改。
如果是,我们可以说仅当命令涉及更改的文件时才使用缓存。
不COPY
,ADD
这只是Docker可能会使缓存无效的方法之一。RUN
可能还会使缓存无效,这不是因为涉及文件,而是因为shell命令的字符串已更改。另外,即使不涉及文件,任何Dockerfile指令更改都可能使缓存无效。请参阅杠杆构建缓存文档
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句