Thank you for reading this post, don't forget to subscribe!
Для Docker мы можем найти большое количество готовых базовых образов на основе различных операционных систем. Но если нужного нам нет, то предусмотрен механизм создания своего собственного имиджа. Рассмотрим процесс подробнее на базе Astra Linux (Deb).
Предварительная подготовка
Прежде чем начать, выполним следующие действия:
1. Развернем систему, из которой мы будем делать образ. У меня был Astra Linux SE 1.7. Технически, это делать не обязательно — установив CentOS, мы можем сделать образ для Ubuntu. Но так пройдет не во всех случаях.
2. Установим на систему, в которой мы будем работать, Docker.
Мы готовы переходить, непосредственно, к работам по созданию базового образа.
Создание образа с помощью bootstrap
Лучше всего использовать Debootstrap/Yumbootstrap. Данный инструмент позволяет установить базовую операционную систему в обычный каталог. Нам необходима данная процедура перед импортом чистой системы в Docker — это позволит убрать все лишнее и существенно снизить объем будущего образа.
В нашем примере используется дистрибутив Astra Linux, который разработан на базе Debian. Для данных систем установка выполняется командой:
apt install debootstrap
Выполняем установку чистой системы в каталог:
debootstrap 1.7_x86-64 astra-folder https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/
* тут есть несколько важных моментов:
- 1.7_x86-64 — имя скрипта из каталога /usr/share/debootstrap/scripts для установки системы. Прежде чем запускать команду, стоит пройти по данному каталогу и найти имя нужно вам скрипта. Это одна из причин, почему стоит создавать docker-образ в той же системе — нужного нам скрипта может не оказаться (маловероятно, что скрипт для Astra Linux будет в Rocky Linux).
- astra-folder — имя локального каталога, куда будет установлена система.
- https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main — путь к репозиторию, откуда нужно взять базовые пакеты. Данная опция необязательна, однако в случае с Astra Linux, debootstrap пытается найти пакеты в репозиториях debian, что приводит к ошибке.
В моем случае вышевведенная команда завершалась ошибкой из-за отсутствия некоторых файлов so. Чтобы решить проблему, во время ее выполнения нужно открыть второй сеанс консоли и скопировать файлы из системы в каталог установки, например:
cp /usr/lib/{libparsec-base.so.3,libparsec-aux.so.3} astra-folder/usr/lib/
* в нашем случае это 2 файла — libparsec-base.so.3 и libparsec-aux.so.3.
Утилита debootstrap загрузит минимальный набор пакетов с репозитория и выполнит установку системы в указанном нами каталоге.
Если нужно доработать нашу систему — установить дополнительные пакеты или загрузить файлы, выполняем все действия относительно созданного каталога. В нашем примере:
chroot astra-folder
Теперь создаем образ для Docker:
tar -C astra-folder -c . | docker import - astra-se1.7:1
* где astra-folder — созданный каталог с установленной системой; astra-se1.7:1 — название и версия образа.
Готово. Посмотреть список образов можно командой:
docker images
Создание образа с помощью tar
В инструкции был рассмотрен способ с правильной подготовкой образа и использованием его. Если есть причина не использовать инструмент Debootstrap/Yumbootstrap, то можно создать более грубый образ с использованием tar. Такой образ будет иметь, куда, больший размер, но в некоторых случаях это может быть не принципиально.
Работа должна выполняться в системе, из которой мы сделаем образ. При желании, мы можем заранее установить необходимые инструменты или наоборот, чтобы образ занимал меньше места, удалить некоторые пакеты и файлы.
После вводим команду:
tar --numeric-owner --exclude=/proc --exclude=/sys -cf astra-base.tar /
* где astra-base.tar будет именем tar-файла с нашей системой. В него попадет содержимое всех каталогов, кроме /proc и /sys.
И создаем образ:
cat astra-base.tar | docker import - astra-se1.7:1
* где astra-base.tar — созданный тарбол; astra-se1.7:1 — имя образа, который будет создан.
Проверяем:
docker images
Мы должны увидеть что-то на подобие:
1 2 |
REPOSITORY TAG IMAGE ID CREATED SIZE astra-se1.7 1 0998166e59a1 57 seconds ago 993MB |