Создание собственного base-образа Docker с ОС Linux

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: Docker, Операционная система.

Для Docker мы можем найти большое количество готовых базовых образов на основе различных операционных систем. Но если нужного нам нет, то предусмотрен механизм создания своего собственного имиджа. Рассмотрим процесс подробнее на базе Astra Linux (Deb).

Предварительная подготовка

Прежде чем начать, выполним следующие действия:

1. Развернем систему, из которой мы будем делать образ. У меня был Astra Linux SE 1.7. Технически, это делать не обязательно — установив CentOS, мы можем сделать образ для Ubuntu. Но так пройдет не во всех случаях.

2. Установим на систему, в которой мы будем работать, Docker. Подробнее в инструкции Установка Docker на Linux.

Мы готовы переходить, непосредственно, к работам по созданию базового образа.

Создание образа с помощью 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, что приводит к ошибке.

Считаю важным рассказать про еще один нюанс, касающийся Astra Linux. В моем случае вышевведенная команда завершалась ошибкой из-за отсутствия некоторых файлов 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

Мы должны увидеть что-то на подобие:

REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
astra-se1.7   1         0998166e59a1   57 seconds ago   993MB

Читайте также

Вам также может оказаться полезным:

1. Создание собственного образа Docker.

2. Настройка локального репозитория для образов Docker и работа с ним.

3. Настройка веб-сервера в Docker (NGINX + PHP + MariaDB).

# Linux # Операционные системы # Виртуализация # DevOps
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет