Относительно легко обновлять базовый образ с помощью Docker.На Docker Hub это полностью автоматизировано.Пользовательские CI-системы легко создаются для просмотра идентификаторов базовых образов.
То, что я не могу найти, - это хорошее решение для обработки обновлений ВНУТРИ образа программного обеспечения, обрабатываемого менеджерами пакетов, например apt.
Например, рассмотрим образ Docker, который начинается с debian: stretch и устанавливает openssl и ca-сертификаты.Как можно автоматически перестроить образ, когда один из этих пакетов получит обновление в хранилище apt?Ни один из обычных подходов не справляется с такой ситуацией, поскольку не происходит ни изменения SCM, ни изменения базового образа.
По моему мнению, правильный способ справиться с этим - обнаруживать обновления пакетов в образе, перестраиватьimage и пусть хосты Kubernetes / Docker автоматически перезапускают контейнеры, когда их образ обновляется в хранилище.(если вы хотите автоматическое обновление контейнера - что я и делаю)
Единственный способ, который я могу придумать, - это запустить скрипт на CI, который запускает образ, но заменяет инструкцию CMD скриптом, который возвращает числодоступных обновлений пакета и вызывает сборку --no-cache, если число больше 0. Это своего рода копирует поведение автоматических обновлений, но гораздо более подходящее для среды контейнера, такой как Docker.
Это можетзатем запускаться периодически, например, каждый час, и автоматически выдвигать новые образы, когда доступны обновления пакетов.
Кто-нибудь делает что-то подобное или имеет сравнимое решение проблемы?Наш обходной путь - просто ежедневно перестраивать все изображения с помощью --no-cache, даже если ничего не изменилось.Хотя это работает, это ужасно расточительно для ресурсов и вынуждает ненужные ежедневные перезапуски контейнера.