Человеческие docker-образы AstraLinux

В 100% последних проектов мы используем docker и kubernetes, поэтому, повстречавшись с «особым» путем использования базовых docker-образов AstraLinux, мы решили упростить жизнь себе и другим разработчикам.

Кому лень читать дальше, то образы здесь https://hub.docker.com/r/ipodsekin/astralinux.

А кому интересны подробности, добро пожаловать под кат.

«Особый» путь

Разработчик AstraLinux предоставляет готовые docker-образы, которые вы можете использовать в своих проектах.

e05c98a4658e5b65b2f52b0bf4303a76.png

Для этого вы можете зайти на сайт https://vault.astralinux.ru/images/, найти интересующий вас дистрибутив, скачать его в виде… tar-архива и загрузить на ваш Docker Host. Это делается командой:

cat alse-slim-1.7.1-docker-mg7.0.0.tar| docker import - alse/alse1.7.1

Полагаю, что данный способ отличается от того, к чему привыкли разработчики, просто указывая наименование docker-образа в Dockerfile:

FROM ubuntu:22.04
...

Манипуляции с tar-архивами усложняют CI/CD, заставляют создавать промежуточные Docker Registry, а также делают неочевидным автоматическое обновление базовых образов.

А когда разрабатываем совсем простые образы, то мы просто на docker.com указываем автоматическую сборку: Docker Hub сам скачивает исходники, собирает образ, проверяет на уязвимости, а потом еще и webhook пришлёт вдогонку. Ясно, что tar-архивы идут мимо.

Путь самурая

Мы разработали скрипт https://gitlab.com/cloudlab_ru/astralinux, который позволяет скачивать tar-архивы docker-образов и публиковать их в Docker Hub. Самым очевидным решением было создать bash-файл со ссылками, прибитыми гвоздями, но тогда нужно было бы заходить на сайт, проверять наличие нового или обновленного образа (с тем же тэгом), обновлять bash-файл руками и т.п. Этот путь тоже «особый».

Был написан парсер в одну строку, который вытаскивал имена SHA-хэшей образов.

Затем, проходимся в цикле по ссылкам, скачиваем SHA-файл и проверяем, что у нас до этого не было образа с таким же SHA-хэшем. При этом сам tar-файл не проверяем на SHA, считаем, что разработчик все делает правильно. Так вот, если у нас не было такого файла, то скачиваем архив, импортируем в локальный Docker Host, а затем заливаем в Docker Hub имени меня https://hub.docker.com/r/ipodsekin/astralinux.

После этого мы можем уже свободно скачивать образ

docker pull ipodsekin/astralinux:orel-slim-2.12.45-mg7.1.0

или использовать его в качестве базового в вашем Dockerfile:

FROM ipodsekin/astralinux:orel-slim-2.12.45-mg7.1.0
...

Наш скрипт запускается раз в день и заливает обновления в Docker Hub.

Проверка

Создаем тестовый образ с curl:

FROM ipodsekin/astralinux:orel-slim-2.12.45-mg7.1.0
RUN apt-get update && apt-get install curl -y

Собираем его:

docker build . -t astralinuxtest

Запускаем контейнер и заходим в него:

docker run -it astralinuxtest /bin/sh

Первым же делом проверяем, какой образ у нас поднялся:

# uname -a
Linux dd6a033a7f5e 5.15.0-48-generic #54~20.04.1-Ubuntu SMP Thu Sep 1 16:17:26 UTC 2022 x86_64 GNU/Linux

Ubuntu… Упс…

Мы убили минут 10 времени на перепроверки, но, нет, все верно, это Ubuntu, но AstraLinux. Убедиться в этом мы можем, прочитав версию AstraLinux:

# cat /etc/astra_version                   
CE 2.12.45 (orel)

Ну, и для проформы можно протестировать curl внутри:

curl https://www.google.com/

Образ работает, можно использовать.

Мы потратили примерно два часа на создание скрипта и написание этой статьи. Будет здорово, если разработчик ОС последует нашему примеру и выложит официальные образы в удобном виде.

© Habrahabr.ru