Вобщем не понимаю я переживаний на счет Докера, ну ушел и ушел, это блин вообще некритикал, все уже привыкли)

Но задумался вот над чем. Вобщем есть такая компания Chainguard, которая готовит такие образа в которых всегда 0 уязвимостей*, ну кроме неизвестных (* - по версии компании). Вообще, круто то, что это прям максимальный Shift left без каких-либо вспомогательных инструментов. Так вот подписка там платная и только с ней можно качать образа определенной версии. В бесплатной подписке можно пулить только образа с версией latest. Разумеется, если вы серьезный энтерпрайз, а не хипстерский стартап, то такое использовать фе. Но, что если написать такую штуку, которая определяет версию образа. Причем это вполне реально. 

Например, такое:

  1. По названию образа определяем команду для вывода версии продукта (с помощью справочника, ии или захардкоженной логики)

  2. Запускаем необходимую команду в контейнере из latest-образа

  3. Грепаем оттуда версию

  4. Ретегируем образ полученной версией 

  5. Пушим в свой прайват репозиторий

Вот к примеру вручную:

  1. Берем образ 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

  2. Запускаем необходимую команду для определения версии в контейнере

    $ docker run cgr.dev/chainguard/nginx -v
    nginx version: nginx/1.25.5

  3. Парсим версию. Лень думать, спрашиваем у жпт)

    Парсим версию:
    $ echo "nginx version: nginx/1.25.5" | grep -oP '(?<=nginx/)[^\s]+'
    1.25.5

  4. Ретегируем образ

    $ docker tag cgr.dev/chainguard/nginx:latest <private repo>/nginx:1.25.5

  5. Пушим в прайват-репу

     $ docker push <private repo>/nginx:1.25.5

    Кстати, интересно, кто еще об это думал или попробовал написать такое? Пообщался щас с Rus Dacent'ом . Толик об этой идее кстати рассказывал на DefCon в Нижнем Новгороде ;)

    Тут вот еще есть ньюанс, с такой схемой с чейнгардом, нет возможности вытянуть конкретную версию, а только последние, которые определил. ну и latest - может быть что угодно. Например ты тянул jvm и вытянул jvm 8, потому что ее последний раз пересобрали. Понятно, что скорее там будут последние версии приезжать, но все же.

    Либо вот еще идея: сделать справочник своего стека и версий, фоново выкачивать с chainguard SBOM-ы latest версии, там искать версию пакета и если она подходит, то выкачивать образ и загружать в свою репу.

    Можно анализировать Dive'ом образа и определять версию:

    В общем есть над чем подумать, попозже попробую навоять сервис:)

Комментарии (11)


  1. neuroburn
    30.05.2024 22:44
    +2

    cut -d "/" -f2
    не ?


    1. SergeySabbath Автор
      30.05.2024 22:44

      можн и так да:)


  1. xiva
    30.05.2024 22:44
    +3

    а версию указанную на карточках образов никак не проще взять в Chainguard Images , чем у вас какие то сложности непонятные к каждому образу новые команды.


    1. SergeySabbath Автор
      30.05.2024 22:44

      угум, отличная идея


      1. SergeySabbath Автор
        30.05.2024 22:44
        +1

        в latest - последняя сборка, но не обязательно последняя версия, а на карточке - последняя версия


        1. RZK333
          30.05.2024 22:44

          1. SergeySabbath Автор
            30.05.2024 22:44

            естественно


    1. SergeySabbath Автор
      30.05.2024 22:44
      +1

      1 на карточке может не соответствовать версия, щас на карточке nginx 1.26.1, а когда пулишь latest приезжает 1.25.5
      2 программно тоже не оч удобно будет искать по карточкам


  1. SergeySabbath Автор
    30.05.2024 22:44

    Тут вот еще есть ньюанс, с такой схемой с чейнгардом, нет возможности вытянуть конкретную версию, а только последние, которые определил. ну и latest - может быть что угодно. Например ты тянул jvm и вытянул jvm 8, потому что ее последний раз пересобрали. Понятно, что скорее там будут последние версии приезжать, но все же.


  1. SergeySabbath Автор
    30.05.2024 22:44

    Либо вот еще идея: сделать справочник своего стека и версий, фоново выкачивать с chainguard SBOM-ы latest версии, там искать версию пакета и если она подходит, то выкачивать образ и загружать в свою репу


  1. coodi
    30.05.2024 22:44

    *образы