Дерево страниц

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 28 Следующий »

Статья к публикации не готова.

Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
  • Astra Linux Common Edition 2.12.35

Установка пакетов

Установить пакеты, необходимые для создания собственных образов Docker, можно либо с помощью графического менеджера пакетов либо из командной строки командой:

sudo apt install debootstrap docker.io

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

Собственный образ создаётся в три этапа:

  1. Выполняется сборка chroot-окружения;
  2. Выполняется настройка chroot-окружения;
  3. Полученное chroot-окружение конвертируется в образ Docker.

Порядок действий:

  1. Сборка chroot-окружения выполняется командой debootstrap. При установке для удобства дальнейшей работы в chroot-окружении можно (не обязательно) сразу установить пакеты ncurses-term, mc, locales, nano, gawk, lsb-release, acl, perl-modules-5.28. Варианты установки:
    1. Если каталоги репозиториев доступны по сети, то загрузка пакетов для сборки может выполняться непосредственно из этих сетевых репозиториев, например, для Astra Linux Special Edition - из общедоступного сетевого репозитория. В примерах ниже chroot-окружение Astra Linux создаётся в каталоге /home/docker-chroot.

      Каталог /home для размещения chroot-окружения выбран потому, что по умолчанию в Astra Linux Special Edition он имеет метку безопасности 3:63:-1:ccnr, позволяющую создавать в нем файловые объекты с любыми файловыми метками. При этом приведенные в примерах команды выполняются в привилегированном режиме (от имени администратора с правами суперпользователя (при включенном МКЦ - с высоким уровнем целостности). Для работы в непривилегированном режиме администратором системы должен быть создан доступный пользователю каталог с необходимой меткой безопасности.

      Пример команды: 

      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/
      В примере в создаваемое chroot-окружение сразу устанавливается пакет apt-transport-https, что в дальнейшем позволит выполнять обновления из сетевых репозиториев используя защищенный протокол https.

      Для 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, например:

      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 \
          /home/docker-chroot \
          ftp://server/incoming/releases/se-1.7/base-repository
      В данном примере предполагается, что сетевые https-репозитории не используются (пакет apt-transport-https не нужен и не устанавливается).

    2. Если сетевые репозитории пакетов недоступны (не используются), то загрузка может быть выполнена из копии репозитория в локальной файловой системе, например:

      sudo debootstrap --verbose orel /home/docker-chroot file:///srv/repo/orel

  2. Настройка окружения может выполняться как от имени суперпользователя, так и с переходом в окружение с помощью команды chroot, например:
    1. Можно использовать имеющиеся файлы /etc/resolv.conf и /etc/apt/sources.list просто скопировав его в chroot:

      sudo cp /etc/resolv.conf /home/docker-chroot/etc/resolv.conf
      sudo cp /etc/apt/sources.list /home/docker-chroot/etc/apt/sources.list
      или, по необходимости, отредактировать файлы в окружении с помощью любого текстового редактора, например:
      sudo nano /home/docker-chroot/etc/apt/sources.list

    2. Выполнить обновление созданного chroot-окружения и, при необходимости, настройку языка, войдя в chroot-окружение с помощью команды chroot (предполагается, что пакет locales был установлен ранее):

      sudo chroot /home/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

    3. Для Astra Linux Special Edition с включенными МРД и МКЦ можно установить пакеты для управления МРД и МКЦ:

      sudo chroot /home/docker-chroot
      apt update && apt install -y parsec linux-astra-modules-common astra-safepolicy
      exit
      и выполнить настройку меток безопасности внутри chroot-окружения:
      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-окружением не забыть отмонтировать системные каталоги:

      for dir in proc sys parsecfs ; do sudo umount "/home/docker-chroot/$dir" ; done
      Удаление каталога с chroot-окружением с примонтироваными системными каталогами приведет к потере работоспособности хост-машины.

  3. Создание образа.

    1. Отмонтировать системные каталоги:

      for dir in proc sys parsecfs ; do sudo umount "/home/docker-chroot/$dir" ; done

    2. Для Astra Linux Common Edition (образ wiki/astralinux:ce):

      sudo tar -C /home/docker-chroot -cpf - . | \
      sudo docker import - wiki/astralinux:ce \
          --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), и в третьем случае - язык для работы в контейнере.

    3. Для Astra Linux Special Edition (образ wiki/astralinux:se) можно сохранить в образе метки безопасности (опции  --xattrs --acls):

      Сначала установить метку безопасности на каталог с docker-образами:

      sudo pdpl-file 3:63:-1:ccnr /var /var/lib /var/lib/docker /var/lib/docker/overlay2/

      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"

Если все операции выполнены успешно, то:

  1. Созданный образ должен отображаться в списке образов:

    sudo docker images

  2. В созданный образ можно войти выполнив команду:

    1. Для Astra Linux без МРД и МКЦ:

      sudo docker run -it --rm wiki/astralinux:ce

    2. Для Astra Linux с включенными МРД и МКЦ:

      sudo docker run --rm -it \
          -v /dev:/dev \
          -v /proc:/proc \
          -v /sys:/sys \
          -v /parsecfs:/parsecfs \
          wiki/astralinux:se /bin/bash

  • Нет меток