我们的Docker构建之一是始终不重用CI上的缓存层。我删除了一些不相关的部分。
FROM python:2.7.11
WORKDIR /code
RUN pip install "pip==9.0.3" "setuptools==39.2.0" && pip install "pipenv==2018.7.1"
ADD requirements/ /code/requirements/
RUN pip install -r requirements/docker.txt
ADD . /code
构建输出:
Step 5/9 : WORKDIR /code
---> Using cache
---> 2b9b8888fcbd
Step 6/9 : RUN pip install "pip==9.0.3" "setuptools==39.2.0" && pip install "pipenv==2018.7.1"
---> Using cache
---> 5e671bccc3d9
Step 7/9 : ADD requirements/ /code/requirements/
---> 7d6b63768850
Removing intermediate container 659522aa0ad1
Step 8/9 : RUN pip install -r requirements/docker.txt
---> Running in 6ff743d5e9b4
中没有任何文件
requirements/
已经改变了,但Docker还是选择重建那个层。该目录中有5个文件。
我怀疑如果添加目录而不是单个文件,Docker可能会忽略缓存,但我找不到任何信息来证明或反驳这一理论。
编辑:
一个接一个地发出两个构建命令
做
正确使用缓存。这个问题只出现在CI(Jenkins)上,在那里它复制了回购协议。
每天都有许多PRS被构建,从单独的Jenkins奴隶(使用共享的Docker主机)中分离出来,它们可能会互相丢弃缓存。不过,这是一个单独的问题和调查。