在Dockerfile中我有一个安装层requirements.txt:
FROM python:2.7
RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
当我构建docker镜像时,无论对此文件所做的任何更改,它都会运行整个过程.
如何pip install -r requirements.txt在文件发生更改时确保仅运行Docker ?
Removing intermediate container f98c845d0f05
Step 3 : RUN pip install -r requirements.txt
---> Running in 8ceb63abaef6
Collecting https://github.com/tomchristie/django-rest-framework/archive/master.zip (from -r requirements.txt (line 30))
Downloading https://github.com/tomchristie/django-rest-framework/archive/master.zip
Collecting Django==1.8.7 (from -r requirements.txt (line 1))
Run Code Online (Sandbox Code Playgroud) 在我Dockerfile使用curl或ADD下载最新版本的存档,如:
FROM debian:jessie
...
RUN apt-get install -y curl
...
RUN curl -sL http://example.com/latest/archive.tar.gz --output archive.tar.gz
...
ADD http://example.com/latest/archive2.tar.gz
...
Run Code Online (Sandbox Code Playgroud)
RUN使用curl或ADD创建自己的图像层的语句.这将用作未来执行的缓存docker build.
问题:如何禁用该指令的缓存?
在那里工作缓存失效之类的东西会很棒.例如,通过使用HTTP ETag或通过查询最后修改的头字段.这样就可以根据HTTP标头进行快速检查,以确定是否可以使用缓存层.
我知道一些肮脏的技巧可以帮助例如在RUN语句中执行下载shell脚本.它的文件名将在docker build我们的构建系统触发之前更改.我可以在该脚本中进行HTTP检查.但后来我需要将最后使用过的ETag或最后修改过的文件存储到某个文件中.我想知道是否有一些我可以使用的更干净和原生的 Docker功能,在这里.