As the name suggests, bootable container images differ from general purpose containers as the underlying image they use contains all necessary bits to make it act exactly like a standard OS, including modules, systemd, etc. They use specific tailored base images that include a Linux kernel and upon boot systemd is running as pid1 as in a "standard" OS.
Tip
Read more in the mission statement
Bootable container images can enable a 360° integrated container-native workflow that covers the underlying OS up to the application layer. They benefit of a set of dedicated tools (bootc, bootc-image-builder, etc) to compose, build and distribute images that can be defined using common Containerfile structure and instructions.
Some of the main features are:
- Bootable container images goal is to provide a way to deploy and manage immutable image-based Linux systems
- Bootable container images images can act as a source to build VMs/Cloud images.
- Bootable container images images can be used as a source to install and configure a new server/VM using kickstart/Anaconda
- Bootable container images simplify testing applications on different architectures/platforms
- Bootable container images streamline OS updates leveraging the rpm-ostree system
Creating a bootable container is as easy as writing and running a Containerfile like this, in this case using a CentOS Stream 9 base image:
FROM quay.io/centos-bootc/centos-bootc:stream9
CMD [ "/sbin/init" ]
You can proceed customizing the image, adding users, packages, configurations, etc following the Dockerfile Reference
In this repo you will find some use cases that explain and show bootable container images in action!