Hands-on tutorial

Project Hummingbird, hands on.

A follow-along guide to Red Hat's rebuild-don't-patch container base — sixteen sections, five worked example projects, ten Excalidraw diagrams. Cut, paste, run.

Podman 5.x Podman Compose Podman Desktop Fedora 44 macOS cosign · syft · grype
16 Tutorial sections
~7h End-to-end runtime
5 Runnable example projects
2 Platforms — Fedora & macOS
10 Architecture diagrams

Tutorial

Work through the sections in order the first time. Each section ends with a prev/next pager so you don't lose your place.

Map · 0

Outline

How the tutorial is structured and how to read it.

⏱ 5 minutes
Setup · 1

Prerequisites

Install and configure the tooling you'll need before any of the examples will work.

⏱ 30 to 45 minutes
Concepts · 2

What is Project Hummingbird

The conceptual grounding before we start running commands.

⏱ 15 minutes
Build · 3

Podman basics with Hummingbird

Pull, inspect, and run your first Hummingbird image; learn the ephemeral debug-sidecar pattern.

⏱ 25 minutes
Build · 4

Multi-stage builds

Use Hummingbird builder images for the build stage and Hummingbird runtime images for the final stage. Examples in Java (Quarkus), Python, Go, with a Node.js appendix.

⏱ 45 minutes
Build · 5

SBOMs and signing

Generate SBOMs with Syft, sign images with Cosign, and verify the artifacts that ship with stock Hummingbird images.

⏱ 30 minutes
Build · 6

CVE scanning

Use Grype to scan Hummingbird images and your own derived images. See "near zero CVE" with your own eyes.

⏱ 20 minutes
Build · 7

Multi-container apps with Podman Compose

Stand up a small multi-service stack with Hummingbird base images and Podman Compose; cover the Fedora-specific SELinux gotchas and healthcheck timing.

⏱ 30 minutes
Operate · 8

Debugging Hummingbird containers

A four-layer debugging strategy for images that have no shell, no curl, and no diagnostic tools.

⏱ 25 minutes
Operate · 9

Layer optimisation with zstd:chunked

Build images that pull faster on subsequent updates by using the zstd:chunked compression format.

⏱ 25 minutes
Operate · 10

Splitting layers with chunkah

A deeper layer-management tool that complements zstd:chunked. Walk through splitting a base image, isolating application code via xattrs, and combining chunkah with zstd:chunked.

⏱ 30 minutes
Apply · 11

Real-world examples

Five end-to-end scenarios that pull together everything from the previous ten sections.

⏱ 45 minutes
Trust · 12

Creating custom SBOMs

Generate richer, application-specific SBOMs that capture build context, multi-source dependency graphs, and cosign-attached attestations beyond what stock images ship with.

⏱ 25 minutes
Trust · 13

Hummingbird with Red Hat Trusted Libraries

Extend the trust chain from base image to application dependencies. Use the Red Hat Trusted Libraries pip index as a drop-in replacement for pypi.org alongside Hummingbird's hardened base images.

⏱ 30 minutes
Build · 14

Installing RPMs into the runtime image

Three patterns for adding OS packages to a Hummingbird runtime image that has no dnf — staged install with --installroot, rpm2cpio extraction, and selective file copy.

⏱ 25 minutes
Operate · 15

Automated updates with Renovate

Configure Renovate to watch Hummingbird base image tags on quay.io and open PRs when new versions land. Covers regex managers for FROM lines, tag pinning strategies, and digest pinning.

⏱ 20 minutes
Operate · 16

Pruning Podman images and build cache

Reclaim disk on a laptop where Hummingbird base updates accumulate. Covers podman image prune, podman system prune, --filter expressions, buildah unshare, and scheduled cleanup.

⏱ 15 minutes
Section · 17

Distroless gotchas — lessons from the field

A debugging-and-prevention reference for the rough edges that surface when running real workloads on Hummingbird's distroless runtime images. Documents symptoms, root causes, and fixes for the issues that came up during tutorial development and testing.

⏱ 30 minutes