Как создать distroless-образ в flowforge

Этот раздел описывает, как создавать distroless-образы в flowforge на базе существующих спецификаций из org/base.

Distroless-образ в flowforge - это OCI-образ, в котором финальный rootfs собирается не через обычную установку пакетов в финальный слой, а через промежуточный builder-образ и tar-архив с минимальным набором файлов. В финальный образ попадает только то, что явно указано в info.yaml и Dockerfile.template.

Общий формат спецификации образа описан в разделе Формат спецификаций в org. Distroless добавляет к нему секцию distroless в info.yaml и несколько helper'ов для Dockerfile.template.

В flowforge есть два способа получить distroless-подобный образ:

  • использовать renderer DistrolessImage; он включается, если в info.yaml есть секция distroless и организация не является k8s-core;
  • написать обычный Dockerfile.template, который наследуется от уже собранного distroless-образа, например {{ registry }}{{ branch }}/distroless-base:latest.

В первом случае главным становится info.yaml: секция distroless передаёт renderer'у описание rootfs, окружения, entrypoint и базового образа. Во втором случае образ остаётся обычным AltImage или K8sImage, а distroless-поведение задаётся самим Dockerfile.

Где смотреть примеры

Актуальные примеры находятся в org/base:

  • distroless-static - минимальный rootfs от scratch;
  • distroless-base - динамический runtime с glibc, timezone и базовыми библиотеками;
  • distroless-cc - C/C++ runtime поверх distroless-base;
  • distroless-python3 - Python runtime поверх distroless-cc;
  • distroless-true, distroless-toybox, distroless-gotop - небольшие прикладные примеры;
  • distroless-devel - отладочный образ с shell и набором инструментов;
  • distroless-busybox - пример custom Dockerfile поверх distroless-base.

Вне org/base тоже есть образы, которые используют distroless как runtime base. Например org/k8s-extra/kube-rbac-proxy, org/k8s-extra/hubble-ui-backend, org/k8s-extra/spire-agent и org/alt/bldr наследуются от distroless-base или distroless-static. Если в их info.yaml добавить секцию distroless, flowforge будет рендерить их через DistrolessImage.

Если поведение документации расходится с кодом, точкой истины является core/image/distroless.py и текущие спецификации в org.