Image Mode (bootc)
RHEL Image Mode, GA since RHEL 9.6 and built into RHEL 10, is a new way to deliver the operating system: pack the entire OS (kernel, packages, configuration) into a single OCI container image, then build, distribute, and update it with the container toolchain. The core component is bootc (bootable containers). Nothing underneath changes — packages, kernel, and systemd are the same as traditional RHEL. What changes is the delivery model.
Why Image Mode Exists
Section titled “Why Image Mode Exists”The pain points of traditional RHEL operations:
- Applications go into containers, but the OS itself is still configured layer by layer with RPM plus Ansible — two artifacts, two pipelines
- System state “drifts”, hard to reproduce, with rollback depending on backups
- Debugging differences between development, testing, and production is expensive
Image Mode’s answer:
- One artifact: applications and the OS live in the same container image, distributed from the same registry
- Immutable base, declarative updates: the system is defined by the image; updating means pulling a new image, and rollback is built in
- Familiar tools: build with a Containerfile plus Podman/Buildah — no new DSL to learn
Core Concepts
Section titled “Core Concepts”| Concept | What It Is |
|---|---|
| rhel-bootc | Red Hat’s official bootable base image (registry.redhat.io/rhel10/rhel-bootc) |
| bootc | Tooling to install, boot, and update image-based systems (bootc upgrade, bootc status on the host) |
| Containerfile | Same as ordinary container builds, but the output is a bootable image |
| bootc-image-builder | Converts bootc images into ISO, qcow2, AMI, and other installation media |
Quick Start: Building a Custom OS Image
Section titled “Quick Start: Building a Custom OS Image”1. Write the Containerfile
Section titled “1. Write the Containerfile”FROM registry.redhat.io/rhel10/rhel-bootc:latest
# Identical to ordinary image builds: install packages, copy configRUN dnf -y install nginx && dnf clean allCOPY nginx.conf /etc/nginx/nginx.confCOPY app.conf /etc/sysctl.d/
# Declare boot-time services with systemd unitsRUN systemctl enable nginx.service2. Build and Push
Section titled “2. Build and Push”$ podman build -t quay.io/yourorg/rhel-custom:1.0 .$ podman push quay.io/yourorg/rhel-custom:1.03. Install onto Machines
Section titled “3. Install onto Machines”Two routes:
- Physical machines / existing systems: run
bootc install to-disk, or on a running bootc systembootc switchto your image - Cloud/VM images: generate qcow2, AMI, or ISO with bootc-image-builder
$ podman run \ --rm -it --privileged \ --volume ./output:/output \ quay.io/centos-bootc/bootc-image-builder:latest \ quay.io/yourorg/rhel-custom:1.0 --type qcow24. Day-2 Updates and Rollback
Section titled “4. Day-2 Updates and Rollback”On a running bootc system:
$ sudo bootc upgrade$ sudo systemctl reboot
# Roll back to the previous image when something breaks$ sudo bootc rollbackUpdates run automatically on a systemd timer — think of it as “a yum update driven by git”.
Compared with the Traditional Approach
Section titled “Compared with the Traditional Approach”| Dimension | Traditional RHEL (RPM + Kickstart) | Image Mode (bootc) |
|---|---|---|
| System definition | Package list + config management tool | One container image tag |
| Updates | dnf upgrade | bootc upgrade (pull image) |
| Rollback | Depends on snapshots/backups | Built-in previous-boot rollback |
| Build output | ISO + Ansible playbook | OCI image |
| Package changes | dnf install anytime | Change the image and republish (host still supports dnf for emergencies) |
When to Use It (and When Not)
Section titled “When to Use It (and When Not)”Good fit:
- Large, standardized server fleets (edge, cloud, CI runners)
- Compliance scenarios that want “system version = image tag” auditability
- Teams already running GitOps/container pipelines who want the OS in the same pipeline
Not yet a fit:
- Single, constantly changing experimental boxes (package-level flexibility wins)
- Setups relying on third-party kernel modules or frequent hardware changes (verify first)
- Small environments with no container toolchain — Image Builder and Kickstart deliver more direct value there
Further Reading
Section titled “Further Reading”- Image Builder — The traditional image customization route
- Kickstart — The standard non-image automated installation
- Podman — The foundation Image Mode builds on
- FIPS Mode — Declaring compliance baselines inside your image