Ответ 1
Отказ от ответственности: я ведущий инженер-программист на Quay.io, приватном реестре контейнеров Docker, поэтому это обоснованное предположение, основанное на той же проблеме, с которой мы столкнулись в нашей собственной реализации системы сборки.
Учитывая мой опыт работы с системами сборки Dockerfile, я подозреваю, что Docker Hub не поддерживает кеширование из-за того, как кеширование реализовано в Docker Engine. Кэширование для сборки Docker работает путем сравнения команд, которые должны выполняться против существующих слоев, найденных в памяти.
Например, если Dockerfile имеет форму:
FROM somebaseimage
RUN somecommand
ADD somefile somefile
Затем код сборки Docker будет:
- Проверьте, существует ли соответствие
somebaseimage
- Проверьте, есть ли локальное изображение с командой
RUN somecommand
, чей родитель является предыдущим изображением - Проверьте, есть ли локальное изображение с командой
ADD somefile somefile
+ хеширование содержимогоsomefile
(чтобы убедиться, что оно недействительно при измененииsomefile
), родителем которого является предыдущее изображение
Если какой-либо из вышеперечисленных шагов соответствует, тогда эта команда будет пропущена в процессе сборки Dockerfile, вместо этого будет использовано кэшированное изображение. Тем не менее, одна из ключевых проблем этого процесса заключается в том, что для поиска и проверки совпадений требуется, чтобы кешированные изображения были присутствующими на машине сборки. Наличие всех всех изображений на узлах сборки будет крайне неэффективным, что затрудняет решение этой проблемы.
На Quay.io мы решили проблему кэширования, создав вариацию кода кэширования Docker, который может предварительно скопировать эти команды/хэши, а затем спросить наш реестр для кешированных слоев, загрузив их на компьютер только после того, как мы нашли самый эффективный набор кеширования. Это потребовало значительных изменений модели данных в нашем коде реестра.
Если вам нужна дополнительная информация, мы предоставили технический обзор того, как мы это делаем в этом разговоре: https://youtu.be/anfmeB_JzB0?list=PLlh6TqkU8kg8Ld0Zu1aRWATiqBkxseZ9g