Человеческие docker-образы AstraLinux
В 100% последних проектов мы используем docker и kubernetes, поэтому, повстречавшись с «особым» путем использования базовых docker-образов AstraLinux, мы решили упростить жизнь себе и другим разработчикам.
Кому лень читать дальше, то образы здесь https://hub.docker.com/r/ipodsekin/astralinux.
А кому интересны подробности, добро пожаловать под кат.
«Особый» путь
Разработчик AstraLinux предоставляет готовые docker-образы, которые вы можете использовать в своих проектах.
Для этого вы можете зайти на сайт 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/
Образ работает, можно использовать.
Мы потратили примерно два часа на создание скрипта и написание этой статьи. Будет здорово, если разработчик ОС последует нашему примеру и выложит официальные образы в удобном виде.