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 是 .
的一部分),因此 COPY
需要再次执行,生成一个新层。生成新层后,后续的每个层都不再有缓存,需要重新构建。
要改进缓存,请考虑将更改较少的行放在 Dockerfile 的顶部。那将留下 COPY 。/code
行放在文件的最后,因为它几乎每次都会改变。
您还应该在 .dockerignore
文件中包含不需要的文件,以避免它们的更改破坏缓存。例如。 .dockerignore
可以包含:
Dockerfile
.git
或者我倾向于使用反向文件,忽略所有内容,然后重新包含构建应用程序所需的特定文件:
*
!Makefile
!app/
执行 COPY 时,上述内容仅包括
,其他所有内容都将被忽略。Makefile
和 app
目录。/code
关于caching - Docker 构建未使用缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45929081/