Как слои кэшируются в образах докеров? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть эта команда в моем файле Docker:

ADD static/ /www/static/

Я заметил, что при повторном запуске docker build повторно используется кэш, хотя содержимое каталога static/ изменилось.Это нормально?

Как докер решает, когда нужно перестроить слой?Просто взглянув на команду, которую нужно выполнить, или проверив фактическую выполненную операцию?Я предполагаю, что это первое, так как последнее потребует повторного запуска операции, что отрицательно скажется на цели кэширования.

Обходной путь, который я использую сейчас, - --no-cache, но это замедляет построение, поскольку ни один слой не являетсяповторно.Есть ли лучший способ?

Я думаю, что лучшим вариантом будет пометить одну операцию как некэшируемую.Это возможно?

1 Ответ

0 голосов
/ 02 октября 2018

Согласно веб-сайту Dockers , кэш для определенного слоя должен быть признан недействительным, если инструкция была изменена.
Однако для ADD и COPY контрольные суммы файлов сравниваются, и если они имеютизменен, кэш недействителен.

Поэтому кажется, что содержимое файлов в static/ не изменилось.Поэтому, чтобы быть уверенным, что вы можете увидеть странное поведение, выполните контрольную сумму для файлов в static/ перед первой сборкой и перед вторым - при повторной сборке с обновленными файлами.

...