Как создать 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.