Docker и точка. Отжимаем образа у Chainguard
Вобщем не понимаю я переживаний на счет Докера, ну ушел и ушел, это блин вообще некритикал, все уже привыкли)
Но задумался вот над чем. Вобщем есть такая компания Chainguard, которая готовит такие образа в которых всегда 0 уязвимостей*, ну кроме неизвестных (* — по версии компании). Вообще, круто то, что это прям максимальный Shift left без каких-либо вспомогательных инструментов. Так вот подписка там платная и только с ней можно качать образа определенной версии. В бесплатной подписке можно пулить только образа с версией latest. Разумеется, если вы серьезный энтерпрайз, а не хипстерский стартап, то такое использовать фе. Но, что если написать такую штуку, которая определяет версию образа. Причем это вполне реально.
Например, такое:
По названию образа определяем команду для вывода версии продукта (с помощью справочника, ии или захардкоженной логики)
Запускаем необходимую команду в контейнере из latest-образа
Грепаем оттуда версию
Ретегируем образ полученной версией
Пушим в свой прайват репозиторий
Вот к примеру вручную:
Берем образ Nginx
$ docker pull cgr.dev/chainguard/nginx
Using default tag: latest
latest: Pulling from chainguard/nginx
Digest: sha256:1a01e891696587501b097645d4feead0e0c512f7919481a10115d01bc1e94d27
Status: Image is up to date for cgr.dev/chainguard/nginx:latest
cgr.dev/chainguard/nginx:latestЗапускаем необходимую команду для определения версии в контейнере
$ docker run cgr.dev/chainguard/nginx -v
nginx version: nginx/1.25.5Парсим версию. Лень думать, спрашиваем у жпт)
Парсим версию:
$ echo "nginx version: nginx/1.25.5" | grep -oP '(?<=nginx/)[^\s]+'
1.25.5Ретегируем образ
$ docker tag cgr.dev/chainguard/nginx:latest
/nginx:1.25.5 Пушим в прайват-репу
$ docker push
/nginx:1.25.5 Кстати, интересно, кто еще об это думал или попробовал написать такое? Пообщался щас с Rus Dacent’ом. Толик об этой идее кстати рассказывал на DefCon в Нижнем Новгороде;)
В общем попозже попробую навоять сервис:)