Как вытащить из реестра Docker только при необходимости, или что вообще означает слово "последний"?
Я использую Gitlab-CI для создания некоторых образов Docker в образе Docker-in-Docker. Это важно только потому, что в каждой сборке используется новая среда docker-in-docker с пустым кешем Docker. Можно кэшировать кеш в Gitlab и восстановить его позже, но это не кажется безопасным - кто-то в Интернете сделал это - но это не кажется безопасным.
У меня есть реестр Docker в Nexus, который я успешно использовал для вытягивания и толкания.
Я также настроил сохранение изображений в кеш Gitlab-ci с помощью docker save
и загрузка из кеша с docker load
,
После извлечения из реестра или загрузки из кеша Gitlab-CI я могу запустить docker build --cache-from ...
и Docker будет строить постепенно, не восстанавливая никаких слоев изображений, которые не изменились.
Все встроенные изображения получают latest
тег.
Часть, которая не работает, такова: если я загружаю изображение из кэша Gitlab-CI, а затем извлекаю из реестра, изображение из реестра всегда используется в качестве точки зрения докера, даже если это недели старше загруженного из кеша. Это похоже на неполноценное поведение - мягко говоря, оно крайне неожиданное и недокументированное, насколько я могу судить.
Как я могу сказать Docker:
1) использовать более позднюю версию как последнюю (альтернативы без latest
теги возможны), и 2) загружать только слои, которые изменились с тех пор, что было загружено в кэш Docker?
Это 2 вопроса, но я надеюсь, что у них одинаковый ответ.
1 ответ
Хорошо, если вы имеете в виду yourimage:latest
, latest
ничего не значит, потому что это всего лишь соглашение, а не гарантия того, что вы действительно тянете буквально новейший (новейший) образ.
Если вы загружаете изображение yourimage:latest
из локального и потом вы вытаскиваете одноименный образ из реестра (yourimage:latest
) последний будет своевременным latest
, Потому что он отличается от первого, даже если первый будет более новым. Если у него есть другой отпечаток, он будет перезаписан.