Доставка приложения в Kubernetes предполагает его контейнеризацию (сборку одного или нескольких образов) для последующего развёртывания в кластере.

Для сборки пользователю необходимо описать сборочные инструкции в виде Dockerfile’а или альтернативного сборочного синтаксиса stapel, а остальное werf возьмёт на себя:

  • безопасная сборка образов в rootless-режиме с встроенным Buildah или привычная сборка с Docker-демоном.
  • оркестрация одновременной/параллельной сборки образов приложения;
  • кроссплатформенная и мультиплатформенная сборка образов;
  • общий кеш промежуточных слоёв и образов в container registry, доступный с любых раннеров;
  • оптимальная схема тегирования, основанная на содержимом образа, предотвращающая лишние пересборки и время простоя приложения при выкате;
  • система обеспечения воспроизводимости и неизменности образов для коммита: однажды собранные образы для коммита более не будут пересобраны.

Парадигма сборки и публикации образов в werf отличается от парадигмы, предлагаемой сборщиком Docker, в котором есть несколько команд: build, tag и push. werf собирает, тегирует и публикует образы в один шаг. Данная особенность связана с тем, что werf по сути не собирает образы, а синхронизирует текущее состояние приложения (для текущего коммита) с container registry, дособирая недостающие слои образов и синхронизируя работу параллельных сборщиков.

В общем случае сборка образов в werf предполагает наличие container registry (--repo), поскольку образ не только собирается, но и сразу публикуется. При этом ручной вызов команды werf build не требуется, так как сборка выполняется автоматически при запуске всех верхнеуровневых команд werf, в которых требуются образы (например, werf converge).

Однако ручной запуск команды werf build может быть полезным во время локальной разработки. В этом случае сборку можно запускать отдельно и без участия container registry.