Создание образа среды исполнения#

Для создания образов среды исполнения EE (execution environment) следует использовать утилиту Ansible Builder.

Инструментом для непосредственного создания образа может быть Podman или Docker.

После установки утилиты и подготовки инструмента контейнеризации необходимо создать файл определения среды исполнения (EE definition). По умолчанию файл называется execution-environment.yml (или execution-environment.yaml).

Этапы сборки#

Ansible Builder выполняет несколько этапов при запуске инструмента контейнеризации для создания образа контейнера:

  1. Base: использует Docker или Podman для загрузки базового образа, который был определен в файле execution-environment.yml, затем устанавливает версию Python (если она определена и отличается от всех версий Python в базовом образе), pip, ansible-runner и ansible-core или ansible. Все три последующих этапа сборки строятся на выводе этапа Base.

  2. Galaxy: загружает определенные в файле execution-environment.yml коллекции с Galaxy и сохраняет их локально.

  3. Builder: загружает Python-пакеты и системные пакеты, определенные в файле execution-environment.yml, и сохраняет их локально.

  4. Final: производит окончательную сборку образа.

Если необходима настройка размера разделяемой памяти (--shm-size) во время сборки EE, рекомендуется использовать Docker.

Файл определения среды исполнения#

Параметры файла execution-environment.yml описаны в документации Ansible.

Настройка размера разделяемой памяти в Docker#

  1. Для настройки размера разделяемой памяти /dev/shm отредактируйте файл конфигурации Docker /etc/docker/daemon.json. Если такой файл отсутствует, создайте его:

    { "default-shm-size": "2g" }
    

    Значение 2g устанавливает размер разделяемой памяти в 2 гигабайта. Это значение следует подобрать исходя из потребностей и доступных системных ресурсов.

  2. После внесения изменений перезапустите Docker:

    sudo systemctl restart docker
    

Сборка образа#

Для сборки образа можно использовать Docker или Podman.

Пример команды для запуска сборки:

sudo ansible-builder build \
   -t my-ee:latest \
   -f execution-environment.yml \
   -c ./context \
   --container-runtime [docker|podman] \
   --build-arg RUN_OPTS="--privileged" \
   -vvv

где:

  • ansible-builder build запускает процесс сборки образа.

  • -t my-ee:latest – локальная метка образа, включающая название и версию.

  • -f execution-environment.yml – путь к файлу с параметрами среды исполнения.

  • -c ./context – путь к каталогу с дополнительными файлами, которые должны быть включены в образ.

  • --container-runtime [docker|podman] – инструмент контейнеризации для сборки образа:

    • podman;

    • docker.

    Значение по умолчанию – podman.

  • --build-arg RUN_OPTS="--privileged" добавляет аргументы к процессу сборки, например, запуск контейнера в привилегированном режиме. Это может быть необходимо для выполнения определенных операций, требующих расширенных прав в контейнере.

  • -vvv – максимально подробный вывод сообщений о ходе сборки.