Docker build не использует кеш

docker build не использует кеш.

docker build -f Dockerfile .

генерирует тот же результат, что и в этом случае:

docker build -f Dockerfile --no-cache .

Я модифицирую файл 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"]

Ответ 1

Из файла Dockerfile, если вы добавляете строки в свой файл Docker или изменяете построенный код, есть только одна строка, которую можно кэшировать:

RUN mkdir /code

После этого вы выполните:

COPY . /code

Поскольку вы изменили свой файл Docker, содержимое . (файл Docker является частью .), и поэтому COPY необходимо выполнить снова, создавая новый слой. Как только вы создаете новый слой, каждый следующий слой больше не имеет кеша и нуждается в перестройке.

Чтобы улучшить кеширование, подумайте о том, чтобы поместить строки, которые меньше меняются в сторону верхней части вашего файла Docker. Это оставит COPY./code COPY./code в самом конце файла, так как он будет меняться почти каждый раз.