Обзор

werf позволяет работать со следующими сборочными бэкендами:

  • Docker — традиционный способ, использующий системный Docker Daemon.
  • Buildah — безопасная сборка без демона, поддерживает rootless-режим и полностью встроен в werf.

Необходимые требования и подготовка системы для работы со сборочными бэкендами описаны в разделе сайта Быстрый старт.

Buildah

На данный момент Buildah доступен только для пользователей Linux и Windows с включённой подсистемой WSL2. Для пользователей MacOS на данный момент предлагается использование виртуальной машины для запуска werf в режиме Buildah.

Buildah включается установкой переменной окружения WERF_BUILDAH_MODE в один из вариантов:

  • auto — автоматический выбор режима в зависимости от платформы и окружения;
  • native-chroot использует chroot-изоляцию для сборочных контейнеров;
  • native-rootless использует rootless-изоляцию для сборочных контейнеров. На этом уровне изоляции werf использует среду выполнения сборочных операций в контейнерах (runc, crun, kata или runsc).
export WERF_BUILDAH_MODE=auto

Драйвер хранилища

werf может использовать драйвер хранилища overlay или vfs:

  • overlay позволяет использовать файловую систему OverlayFS. Можно использовать либо встроенную в ядро Linux поддержку OverlayFS (если она доступна), либо реализацию fuse-overlayfs. Это рекомендуемый выбор по умолчанию.
  • vfs обеспечивает доступ к виртуальной файловой системе вместо OverlayFS. Эта файловая система уступает по производительности и требует привилегированного контейнера, поэтому ее не рекомендуется использовать. Однако в некоторых случаях она может пригодиться.

Как правило, достаточно использовать драйвер по умолчанию (overlay). Драйвер хранилища можно задать с помощью переменной окружения WERF_BUILDAH_STORAGE_DRIVER.

Ulimits

По умолчанию Buildah режим в werf наследует системные ulimits при запуске сборочных контейнеров. Пользователь может переопределить эти параметры с помощью переменной окружения WERF_BUILDAH_ULIMIT.

Формат WERF_BUILDAH_ULIMIT=type:softlimit[:hardlimit][,type:softlimit[:hardlimit],...] — конфигурация лимитов, указанные через запятую:

  • core: максимальный размер дампа ядра (ulimit -c).
  • cpu: максимальное время процессора (ulimit -t).
  • data: максимальный размер сегмента данных процесса (ulimit -d).
  • fsize: максимальный размер новых файлов (ulimit -f).
  • locks: максимальное количество блокировок файлов (ulimit -x).
  • memlock: максимальное количество заблокированной памяти (ulimit -l).
  • msgqueue: максимальное количество данных в очередях сообщений (ulimit -q).
  • nice: настройка “niceness” (nice -n, ulimit -e).
  • nofile: максимальное количество открытых файлов (ulimit -n).
  • nproc: максимальное количество процессов (ulimit -u).
  • rss: максимальный размер резидентного набора памяти процесса (ulimit -m).
  • rtprio: максимальный приоритет для реального времени (ulimit -r).
  • rttime: максимальное время реального исполнения между блокирующими системными вызовами.
  • sigpending: максимальное количество ожидающих сигналов (ulimit -i).
  • stack: максимальный размер стека (ulimit -s).