在 Dockerfile 中我有一个安装层requirements.txt
:
FROM python:2.7
RUN pip install -r requirements.txt
当我构建 docker 映像时,它会运行整个过程不管对此文件所做的任何更改。
如何确保 Docker 只运行pip install -r requirements.txt
文件是否有更改?
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))
我假设在构建过程中的某个时刻,您将整个应用程序复制到 Docker 映像中COPY
or ADD
:
COPY . /opt/app
WORKDIR /opt/app
RUN pip install -r requirements.txt
问题在于,每次将整个应用程序复制到映像中时,都会使 Docker 构建缓存失效。这也将使所有后续构建步骤的缓存失效。
为了防止这种情况,我建议复制只有requirements.txt
在将整个应用程序添加到映像之前,在单独的构建步骤中创建文件:
COPY requirements.txt /opt/app/requirements.txt
WORKDIR /opt/app
RUN pip install -r requirements.txt
COPY . /opt/app
# continue as before...
由于需求文件本身可能很少更改,因此您将能够使用缓存的层,直到将应用程序代码添加到映像中为止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)