Предупреждение |
---|
Статья к публикации не готова. |
Оглавление |
---|
Информация | ||
---|---|---|
| ||
Информация | ||
---|---|---|
| ||
Для применения в более ранних обновлениях см. пояснения в тексте. |
Установка пакетов
Установить пакеты, необходимые для создания собственных образов Docker, можно либо с помощью графического менеджера пакетов (см. Графический менеджер пакетов synaptic) либо из командной строки командой:
Command |
---|
sudo apt install debootstrap docker.io |
Создание собственного образа
Собственный образ создаётся создается в три этапа:
- Выполняется сборка chroot-окружения;
- Выполняется настройка chroot-окружения;
- Полученное chroot-окружение конвертируется в образ Docker.
Порядок действий:
- Сборка chroot-окружения выполняется командой debootstrap. При установке для удобства дальнейшей работы в chroot-окружении можно (не обязательно) сразу установить пакеты ncurses-term, mc, locales, nano, gawk, lsb-release, acl, perl-modules-5.28. Варианты установки:
Если каталоги репозиториев доступны по сети, то загрузка пакетов для сборки может выполняться непосредственно из этих сетевых репозиториев, например, для Astra Linux Special Edition - из общедоступного сетевого репозитория. В примерах ниже chroot-окружение Astra Linux создаётся в каталоге /homevar/docker-chroot.
Информация Каталог /home var для размещения chroot-окружения выбран потому, что по умолчанию в Astra Linux Special Edition начиная с обновления БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2) он имеет метку безопасности 3:63:-1:ccnr, позволяющую создавать в нем файловые объекты с любыми файловыми метками . Пример команды:
В примере в создаваемое chroot-окружение сразу устанавливается пакет apt-transport-https, что в дальнейшем позволит выполнять обновления из сетевых репозиториев используя защищенный протокол httpsCommand sudo debootstrap --verbose --include ncurses-term,mc,locales,nano,gawk,apt-transport-https --components=main,contrib,non-free orel /home/docker-chroot https://dl.astralinux.ru/astra/stable/orel/repository/ безопасности. При работе в более ранних обновлениях Astra Linux следует самостоятельно создать подобный каталог (установить метку на каталог /var). Далее в примерах команды выполняются в привилегированном режиме (от имени администратора с правами суперпользователя (при включенном МКЦ - администратора с правами суперпользователя и с высоким уровнем целостности). Для работы пользователей в непривилегированном режиме администратором системы должен быть создан доступный пользователю каталог с необходимой меткой безопасности. Информация Для Astra Linux Special Edition опция --components=main,contrib,non-free обязательна, без неё образ Astra Linux Special Edition собран не будет. Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) следует использовать код дистрибутива 1.7_x86-64, например:
Command sudo debootstrap \
--include ncurses-term,mc,locales,nano,gawk,lsb-release,acl,perl-modules-5.28 \
--components=main,contrib,non-free 1.7_x86-64 \
/homevar/docker-chroot \
ftphttp://server/incoming/releases/se-dl.astralinux.ru/astra/stable/1.7_x86-64/baserepository-repositorymainВ данном примере предполагается, что сетевые https-репозитории не используются (пакет apt-transport-https не нужен и не устанавливается).
Если сетевые репозитории пакетов недоступны (не используются), то загрузка может быть выполнена из копии репозитория в локальной файловой системе, например:
Command sudo debootstrap --verbose orel /homevar/docker-chroot file:///srv/repo/orel
- Настройка окружения может выполняться как от имени суперпользователя, так и с переходом в окружение с помощью команды chroot, например:
Можно использовать имеющиеся файлы /etc/resolv.conf и /etc/apt/sources.list просто скопировав его в chroot:
Command sudo cp /etc/resolv.conf /homevar/docker-chroot/etc/resolv.conf
sudo cp /etc/apt/sources.list /homevar/docker-chroot/etc/apt/sources.listили, по необходимости, отредактировать файлы в окружении с помощью любого текстового редактора, например, указать в файле /var/docker-chroot/etc/apt/sources.list репозитории для создания образа:
Command sudo nano /homevar/docker-chroot/etc/apt/sources.list
Предупреждение При выборе репозиториев для создания образов следует по возможности использовать репозитории с последними обновлениями. Использование устаревших репозиториев может вести к невозможности сборки образов из-за наличия уязвимостей в пакетах из этих репозиториев. Рекомендованным способом устранения невозможности запуска является установка актуального оперативного обновления в образ, см. статью Ошибка о наличии уязвимости при создании Docker-образа
Отключить встроенную проверку уязвимостей (не рекомендуется) можно следующим образом:
Раскрыть Порядок проверки уязвимостей в образах определяется значением параметра astra-sec-level службы dockerd. Значением параметра может быть от 1 до 6 включительно, определяющее класс защиты:
- Классы защиты 1 — 5: при обнаружении уязвимости в контейнере его запуск блокируется;
- Класс защиты 6: отладочный режим, при обнаружении уязвимости в контейнере выводится соответствующее предупреждение, при этом запуск контейнера не блокируется.
Задать значение параметра можно:
- С помощью конфигурационного файла:
Создать каталог /etc/docker если он не был создан ранее:
Command sudo mkdir -p /etc/docker Создать конфигурационный файл /etc/docker/daemon.json если он не был создан ранее и указать в нем параметры:
Блок кода { "debug" : true, "astra-sec-level" : 6 }
- С помощью параметров запуска службы:
Выполнить команду:
Command sudo systemctl edit docker Ввести и сохранить данные:
Блок кода [Service] Environment="DOCKER_OPTS=--astra-sec-level 6"
Независимо от использованного способа перезапустить службу docker:
Command sudo systemctl restart docker
Выполнить обновление созданного chroot-окружения и, при необходимости, настройку языка, войдя в chroot-окружение с помощью команды chroot (предполагается, что пакет locales был установлен ранее):
и выполнить настройку меток безопасности внутри chroot-окружения:Command sudo chroot /homevar/docker-chroot
apt update
apt dist-upgrade
echo "ru_RU.UTF-8 UTF-8" >> /etc/locale.gen
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
update-locale ru_RU.UTF-8
exitДля Astra Linux Special Edition с включенными МРД и МКЦ можно установить пакеты для управления МРД и МКЦ:
Command sudo chroot /home/docker-chroot
apt update && apt install -y parsec linux-astra-modules-common astra-safepolicy
exitCommand for dir in proc sys parsecfs ; do sudo mount --bind "/$dir" "/home/docker-chroot/$dir" ; done
sudo chroot /home/docker-chroot
pdp-init-fs
exitПредупреждение Перед удалением каталога с chroot-окружением не забыть отмонтировать системные каталоги: Command for dir in proc sys parsecfs ; do sudo umount "/home/docker-chroot/$dir" ; done Удаление каталога с chroot-окружением с примонтироваными системными каталогами приведет к потере работоспособности хост-машины.
Создание образа.
Отмонтировать системные каталоги:
for dir in proc sys parsecfs ; doCommand
umount "/home/docker-chroot/$dir" ; donesudo Для Astra Linux Common Edition (образ wiki/astralinux:ce):
sudoCommand
hometar -C /
cevar/docker-chroot -cpf - . | \
sudo docker import - wiki/astralinux:se \
--change "ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
--change 'CMD ["/bin/bash"]' \
--change "ENV LANG=ru_RU.UTF-8"в этом примере использована опция -C чтобы сменить текущий каталог при архивировании и
дваждытрижды использована опция импорта --change, задающая в первом случае переменную окружения PATH, во втором - команду, которая будет вызываться по умолчанию при запуске контейнера (/bin/bash), и в третьем случае - переменную окружения, задающую язык для работы в контейнере.
Для Astra Linux Special Edition (образ wiki/astralinux:se) можно сохранить в образе метки безопасности (опции --xattrs --acls):
Предупреждение Сначала установить метку безопасности на каталог с docker-образами:
commandsudo pdpl-file 3:63:-1:ccnr /var /var/lib /var/lib/docker /var/lib/docker/overlay2/ Command sudo tar --xattrs --acls -C /home/docker-chroot -cpf - . | \
sudo docker import - wiki/astralinux:se \
--change "ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
--change 'CMD ["/bin/bash"]' \
--change "ENV LANG=ru_RU.UTF-8"
Если все операции выполнены успешно, то:
Созданный образ должен отображаться в списке образов:
Command sudo docker images В созданный образ можно войти выполнив команду:
Для Astra Linux без МРД и МКЦ:
Command sudo docker run -it --rm wiki/astralinux:ce Для Astra Linux с включенными МРД и МКЦ:
sudo docker run --rm -it \Command
-v /dev:/dev \
-v /proc:/proc \
-v /sys:/sys \
-v /parsecfs:/parsecfs \
wiki/astralinux:se /bin/bashse
Пример сценария создания собственного образа
Раскрыть |
---|
|