Caching Docker生成未使用缓存

Caching Docker生成未使用缓存,caching,docker,build,Caching,Docker,Build,docker build未使用其缓存 docker build -f Dockerfile . 生成与此相同的输出: docker build -f Dockerfile --no-cache . 我正在修改Dockerfile,在文件末尾添加命令。因此,前面的层应该被缓存并有效 我有足够的磁盘空间 有什么想法吗 Docker版本17.06.1-ce,版本874a737 Dockerfile: FROM registry:5000/base/python:xenial RUN mkdir

docker build
未使用其缓存

docker build -f Dockerfile .
生成与此相同的输出:

docker build -f Dockerfile --no-cache .
我正在修改Dockerfile,在文件末尾添加命令。因此,前面的层应该被缓存并有效

我有足够的磁盘空间

有什么想法吗

Docker版本17.06.1-ce,版本874a737

Dockerfile:

FROM registry:5000/base/python:xenial

RUN mkdir /code
COPY . /code

RUN apt-get update && \
    apt-get install -y \
    vim \
    less

COPY /etc/foo /etc/foo

ENTRYPOINT ["/bin/bash"]

在Dockerfile中,如果将行附加到Dockerfile,或更改正在生成的代码,则只能缓存一行:

RUN mkdir /code
之后,执行以下操作:

COPY . /code
由于您已经更改了Dockerfile,
的内容已经更改(Dockerfile是
的一部分),因此需要再次执行
复制
,生成一个新层。生成新层后,接下来的每个层都不再具有缓存,需要重新生成


为了提高缓存,考虑将较少更改的行放置到DOCKFILE文件的顶部。这将留下

副本/代码
行位于文件的最末尾,因为它几乎每次都会更改。

我曾经使用多个同名脚本来构建不同的docker映像。使用ADD时,缓存文件忽略了文件的不同,因此实际上只生成了一个图像。使用该副本,将重建最后一层(使用脚本的层),并生成所有docker映像:)。谢谢请注意,您可以将
Dockerfile
(和
.dockergnore
)包含在.dockergnore文件中,这样就可以将其从
添加
复制
缓存分析中排除。(您仍然应该按照建议的变更单来订购Dockerfile。)我是否需要将.dockerignore添加到我的.dockerignore文件中?是的,您可以自己查看: