Skip to content

What are Cloud Native Buildpacks?

Cloud Native Buildpacks
Cloud Native Buildpacks (CNB) — turn application source into OCI images without a Dockerfile per app.
buildpacks.io
turn application source into OCI images — without every team shipping a Dockerfile.

GitOps
Declarative delivery from Git — manifests live in a repository; Argo CD applies changes on sync.
solved deploy. Many platforms still leave build in each application repo: a Dockerfile, CI credentials, and its own base-image upgrade path.

Side by side: per-app Dockerfile with CI build versus platform buildpacks on EKS pushing to ECR
Dockerfile per app Platform buildpacks
Who owns the build Each application team Platform / ops
What devs push Source + Dockerfile + CI config Source only
Base image CVEs Chase N repos Rebase
CNB operation to refresh an app image onto a newer stack without a full rebuild from source.
one builder stack
In this lab Left column above kpack
Kubernetes-native build service that runs CNB builds on-cluster and pushes images to a registry.
on EKS
Amazon Elastic Kubernetes Service — this lab uses cluster name `cluster-1`.

A Dockerfile is a recipe the app repo owns. Buildpacks move that recipe into a shared builder image the platform owns.

  1. Builder — An OCI image (here Paketo
    Paketo Buildpacks — mature open-source builders for Go, Node, Java, Python, and more.
    jammy) that already contains language buildpacks and a CNB lifecycle binary. Nothing in demo/app/ has to know how to FROM golang or copy layers.
  2. Detect — Each buildpack inspects the source tree. Pulse has go.mod / ./cmd/pulse, so the Go buildpack passes; others skip. Detection replaces “read the Dockerfile.”
  3. Build + Export — The selected buildpacks compile the app into layers, then the lifecycle writes a normal OCI image (run image + app layers) and pushes it. Same end product as docker build, different author of the steps.
  4. Optional config, not a Dockerfile — Pulse’s project.toml only sets BP_GO_TARGETS=./cmd/pulse so Paketo knows which package to build. You can omit it for many apps; it is metadata, not an image recipe.

You never write FROM / RUN / COPY in the app repo because the builder already encodes those steps for supported languages. The hands-on phase log (Detect → Build → Export) is on CNB lifecycle.

Push Go source to CodeCommit
AWS managed Git hosting — GitHub alternative used for app source and deploy manifests in this lab.
kpack
Kubernetes-native build service that runs CNB builds on-cluster and pushes images to a registry.
runs CNB on-cluster → image in ECR
Amazon Elastic Container Registry — stores OCI images built by kpack; EKS pulls from here.
→ managed Argo CD
EKS Capability for Argo CD — AWS-managed Argo CD that reads CodeCommit via IAM on the capability role.
deploys → Pulse
Sample app in this lab — HTTP service monitor with dashboard, API, and Kubernetes health probes.
serves HTTP.

Lab pipeline from CodeCommit through kpack ECR Argo CD EKS to Pulse service

Pulse
Sample app in this lab — HTTP service monitor with dashboard, API, and Kubernetes health probes.
is a Go service monitor: dashboard, JSON API, background health checks, and /healthz / /readyz probes. It proves a real service runs after a buildpack build — not hello-world.

See demo/app/ in the repository.

Diagram icons from CNCF Icons andAWS Icons.

kpack vs pack then Architecture overview.