Unpacking Podman's daemonless architecture: the fork/exec model that launches containers directly by the runtime as child processes, the Podman-Buildah-Skopeo-CRI-O ecosystem, and OCI standard compliance that makes images and runtimes interoperable.

Episode 1 explained why Podman exists: as a daemonless alternative to Docker. Episode 2 opens the hood — how the daemonless architecture really works, who the ecosystem components are, and why OCI standards connect everything together. After this, you will no longer see Podman as just a command, but as an architecture.
Podman's main claim is that it uses no daemon. How is that possible? The model used is called fork/exec.
When you run the podman run command, the flow looks like this:
podman client does a series of preparation steps: reads configuration, prepares storage, and loads the image.crun or runc — runs the container as a child process directly from that process.conmon process monitors the container, forwards logs, and keeps the container from becoming a zombie process.Because there is no central daemon, each container is a direct descendant of the process that requested it. Compare that with Docker, which must communicate with an always-running daemon:
| Aspect | Docker | Podman |
|---|---|---|
| Supervisor process | dockerd daemon always running | No daemon, only child runtimes |
| Execution path | Client, API, daemon, runtime | Client forks, runtime directly |
| Daemon failure | Containers get disrupted | Containers keep running |
Podman supports more than one runtime, and both are implementations of the same standard:
The difference in programming language doesn't change the behavior from your perspective — both run containers according to the same standard. What matters is that both run as child processes, not under a single daemon.
You can prove this model yourself: run a container, then observe its processes from the host:
podman run -d --name web nginx:latest
ps -ef | grep conmon
ps -ef | grep nginxYou will see the conmon process and the nginx process running as regular processes on the host — not under a single daemon process. This is the most tangible proof of the fork/exec model.
Podman is just one of several projects that make up Red Hat's container ecosystem. Each holds a specific role:
| Project | Role |
|---|---|
| Podman | Runs and manages containers and pods |
| Buildah | Builds images from a Containerfile |
| Skopeo | Inspects and copies images between registries |
| CRI-O | Container runtime specifically for Kubernetes |
This division of roles lets each project focus on one job: Podman for runtime operations, Buildah for building images, Skopeo for moving images, and CRI-O for Kubernetes' container engine.
These projects don't work in silos. A concrete example of their collaboration:
This workflow is why you often see Podman, Buildah, and Skopeo installed side by side on one machine. In episode 4, you will use Skopeo directly.
Behind the scenes, Podman reads configuration to determine where images are stored and where they come from. Storage is managed in containers/storage, while registries are managed through registries.conf:
[registries.search]
registries = ["docker.io", "quay.io"]
[registries.insecure]
registries = []registries.search determines the registry search order when you pull an image without a full prefix, like podman pull nginx. The insecure section holds registries allowed to use HTTP without TLS — it's best to leave it empty in a production environment.
For all these projects to work together, there is one binder: the standards from OCI (Open Container Initiative). There are two core specs that matter:
crun and runc are implementations of this spec.This OCI compliance is what lets you run images built with Buildah using the crun runtime, or images from Docker Hub loaded into Podman.
Its most important side effect is compatibility with Kubernetes: because CRI-O uses the same runtime and image format, containers you run on your laptop with Podman can move to a Kubernetes cluster without format changes. This same standard is also what lets Docker and Podman share images with each other.
Important
Remember this division of roles: Podman to run, Buildah to build, Skopeo to move, CRI-O for Kubernetes. When a task feels stuck in Podman, the answer is often in another, more appropriate project.
Note
Because Podman is daemonless, container processes are tied to the session that requested them. If you close the terminal session that started the container, the container keeps running — but to manage it from another session, use podman start or the remote connection covered in later episodes.
Episode 2 reveals Podman's architecture: the fork/exec model that runs each container directly via the crun or runc runtime as a child process with no central daemon, the Podman-Buildah-Skopeo-CRI-O ecosystem where each has its own role, and the OCI standard that unifies them all.
The key points to take home:
registries.conf controls where Podman looks for images.The next episode, Episode 3, gets down to practice: you'll start living with the basic container management commands — run, pull, ps, logs, exec, inspect, stop, rm, stats — plus lifecycle and cleanup.