Learning Library

← Back to Library

Bootable Containers: Immutable OS Images

Key Points

  • About a decade ago, containers revolutionized software delivery by encapsulating code, dependencies, and configuration in a single source‑of‑truth file (Dockerfile) and leveraging GitOps/DevOps pipelines for deployment to any environment.
  • Despite this progress, the underlying operating system still struggles with challenges like validation, transactional upgrades, drift, maintenance, and versioning that are not as easily standardized.
  • The speaker proposes extending the containerization model to the OS itself, introducing “bootable containers” that treat the full OS image as an immutable, atomic unit.
  • Bootable containers are built with existing container tools (e.g., Docker, Podman) using a specialized base image that includes both the operating system and its kernel, following the same Dockerfile‑based workflow.
  • This approach enables developers to apply familiar container‑native processes to create, test, and deliver entire bootable system images, simplifying OS packaging and deployment.

Full Transcript

# Bootable Containers: Immutable OS Images **Source:** [https://www.youtube.com/watch?v=cBom7aDuy9w](https://www.youtube.com/watch?v=cBom7aDuy9w) **Duration:** 00:06:51 ## Summary - About a decade ago, containers revolutionized software delivery by encapsulating code, dependencies, and configuration in a single source‑of‑truth file (Dockerfile) and leveraging GitOps/DevOps pipelines for deployment to any environment. - Despite this progress, the underlying operating system still struggles with challenges like validation, transactional upgrades, drift, maintenance, and versioning that are not as easily standardized. - The speaker proposes extending the containerization model to the OS itself, introducing “bootable containers” that treat the full OS image as an immutable, atomic unit. - Bootable containers are built with existing container tools (e.g., Docker, Podman) using a specialized base image that includes both the operating system and its kernel, following the same Dockerfile‑based workflow. - This approach enables developers to apply familiar container‑native processes to create, test, and deliver entire bootable system images, simplifying OS packaging and deployment. ## Sections - [00:00:00](https://www.youtube.com/watch?v=cBom7aDuy9w&t=0s) **Untitled Section** - - [00:03:04](https://www.youtube.com/watch?v=cBom7aDuy9w&t=184s) **Unified Image Build and Deploy** - The speaker describes creating a bootc-enabled container image, pushing it to a registry, and then using the bootc utility to deploy that same image across edge devices, virtual machines, or hybrid cloud environments, enabling single‑time builds with automatic updates and rollback capabilities. - [00:06:17](https://www.youtube.com/watch?v=cBom7aDuy9w&t=377s) **Getting Started with Bootable Containers** - The speaker encourages viewers to explore bootable container images on repositories like GitHub and to use Podman's desktop extension for testing and deployment, concluding with a reminder to like the video and subscribe for more developer content. ## Full Transcript
0:00I want to travel back in time with you 0:01just for a second, because about a decade ago, 0:03software went through a fundamental shift. 0:06Containers, which define our applications, 0:09including the code base, its dependencies 0:12and everything else that we have to package up for it to run, pave 0:14the way for a new era of software delivery, 0:17defined by, for example, 0:19a container file or Dockerfile, which is our single source of truth 0:23for what this workload will be. 0:25And then after that, of course, we used 0:27GitOps and DevOps 0:29in order to run pipelines 0:32for authenticating, packaging 0:34and delivering our workload to all types of environments, right? 0:37This could be our Kubernetes cluster, 0:40or maybe it's an on-prem or other type of virtualized environment. But, 0:44as you know, this is the application 0:47delivery and development pipeline up here. 0:50And, when we actually go to the underlying 0:53operating system underneath, well, that's a much bigger challenge 0:56because a lot of this standardization, packaging 0:59and delivering that we created for containers 1:01is still a challenge for the underlying operating system. 1:05You've got different factors such as validation. 1:08So, the testing and validation, where we might 1:10just use a patch-and-pray type of approach 1:13to fix something, can be quite an issue. 1:16To other issues such as transactional ... transactional updates. So, 1:20what do I mean by this? Well, it's having the confidence 1:23to upgrade your Linux system from one version to another. 1:26But there's also other sorts of challenges with the ... with 1:29the operating system, such as drift, 1:32and maintenance of our operating system, 1:34and versioning, for example, which can be quite difficult. Now, 1:38a lot of this has been solved 1:40with containers and containerization processes. 1:42But what if we could extend the learning that we've done there and that industry 1:46standard that we've created from containers 1:49to operating systems themselves? 1:52What I want to introduce you to today is a technology 1:55that's called bootable containers. So, 1:57bootable containers, what they allow us to do 2:00is essentially package up a single atomic 2:04and immutable system image 2:07using uh ... existing container-native workflows 2:12that we;re already used to, such as Podman or Docker. 2:16And in this video, you're going to learn 2:18how specifically this works. 2:21So, like ordinary application containers, you can build bootable containers 2:25by using existing container technologies. For 2:27example, the container file. So, 2:30when we work with this container file, 2:33uh, maybe you'd call it a Dockerfile as well. Um, 2:36what essentially is happening here is we're defining 2:39the intended state of our application, right? 2:41But instead of u ... using, say for example, Fedora 2:44as our base image, we're going to be using a specific base image 2:47that has been built for bootable containers, 2:50which includes the operating system plus the kernel. 2:53Now, the next stage is pretty standard. 2:55We're going to take this container file and build it into an image. Right? 3:00And now this image also includes the operating system, which is great. 3:04And we can take that image, as we're used to, 3:06and send this and push it to our registry of choice. 3:10So we've got this registry right here. 3:14Now, this is pretty standard. 3:16We're used to doing this container and cloud-native process 3:19in order to build applications, to deploy them. 3:21But the big difference here 3:23is that when we have this image, 3:25what we can do is prepare it 3:27to be deployed on uh ... our system of choice. So, 3:32here is this kind of deploy step 3:34where we're going to take our bootc-enabled image, 3:38and we're going to use the bootc utility to deploy it 3:40to a wide variety of different environments. So, 3:43for example, this could be edge 3:45that we would deploy to 3:47or maybe a virtual machine 3:49or say for example, somewhere on the hybrid cloud. 3:53And so, this is really cool right here 3:56that we're able to essentially build 3:58one time and deploy anywhere. 4:00And when we actually have an update to make, what we're going to do 4:03is actually rebuild the image 4:05and push it to the registry. So, 4:08once we have that image up in the registry, 4:11we would essentially pull it down from our system of choice. 4:14And this allows for automatic updates and rollback capabilities 4:17that are similar to an appliance, for example. 4:20Now, for administrators or those who are looking to actually manage the systems, 4:24I want to introduce you to the utility, which is called bootc itself. So, 4:29for managing these operating systems, 4:32this allows us to, for example, do these updates. So, 4:35let's say that we have a new version of our bootc-enabled 4:39image that we push to a registry. 4:41When we actually do an update, we would do a bootc update. 4:45And this could either be done manually, where we would 4:47download and stage this update on reboot, 4:49or perhaps we could do this manually. 4:52And there's other commands that we can use as well 4:54in order to do a rollback to a previous version 4:56in case there's an error when we do this update. 4:59So where do we typically see bootable containers being used? Well, 5:02it's a great question because rather than deploying the OS 5:06and the application separately, 5:09what we're doing actually is deploying them both together. So, 5:12the operating system, 5:14the application and its dependencies, 5:17all as this single immutable and atomic unit. 5:20And this is really helpful for solving a number of problems. Firstly, 5:24configuration drift. So, 5:26we're able to manage that as well as different security concerns. 5:31So let's say that something gets released. 5:34You're able to patch and make these quick security patches to all of your systems 5:38by essentially updating one single unit. 5:41Now, we also see edge devices as a common use case here. So, 5:45edge devices, retail devices, situations 5:48where you're working with different environmental challenges and constraints 5:51like internet access, for example, 5:53as well as, for example, AI 5:55applications where you're dealing 5:57with a carefully curated set of different kernels, drivers, 6:01accelerators and more. 6:04But no matter what you want to deploy, this 6:06open-source project lets you manage entire operating systems 6:09the same way we manage applications, 6:11helping to scale, to automate, 6:14and to make our lives just a little bit easier. 6:17So I encourage you to check out bootable containers 6:21online on repositories such as GitHub, for example, uh ... 6:25but also using the container engine Podman. 6:29So, Podman has on its desktop application 6:32a specific extension that can help you get started 6:35working with bootable container images, 6:37testing them out, and deploying them wherever you deploy your apps. But, 6:40as always, thank you so much for watching! 6:43Please like the video if you learned something today 6:46and subscribe for more developer and engineering content. 6:49I'll see you next time.