我有一个包含以下内容的Dockerfile:
FROM ubuntu:17.10
WORKDIR /app
ADD . /app
RUN apt-get update && apt-get install -y \
python3-pip \
python3-numpy \
ffmpeg \
python3.6 \
xz-utils
...
每次运行RUN
时,都会删除在docker build
语句中创建的图层,但我不确定为什么会出现这种情况。安装所有依赖项需要很长时间,所以我希望Docker能够缓存该层并在将来再次使用它。
我该怎么做才能获得这种行为?
谢谢。
答案 0 :(得分:0)
根据documentation,如果一个图层的缓存无效,则需要重新构建后续图层。因此,在Dockerfile中首先使用所有静态步骤是最佳做法(例如,在您的情况下,您可以移动RUN apt-get ...
命令)。希望清楚
对于ADD和COPY指令,文件的内容在 检查图像并计算每个文件的校验和。该 文件的最后修改时间和上次访问时间不是 在这些校验和中考虑。在缓存查找期间,校验和 与现有图像中的校验和进行比较。如果有什么 已更改文件,如内容和元数据,然后 缓存无效。
一旦缓存失效,所有后续的Dockerfile命令都会 生成新图像,不会使用缓存。