Frequently Asked Question

Docker, Podman, LXC, containerd, what's the difference?

They are at different layers of the stack and serve different audiences. Docker is a full container platform, CLI, daemon (dockerd), build system, networking, registry client, designed for application packaging. Podman is Red Hat's drop-in CLI replacement for Docker that runs containers without a central daemon and has had rootless support from the start; if you alias docker=podman most workflows keep working. containerd is the lower-level runtime that Docker itself uses under the hood and that Kubernetes talks to directly; it does not have a friendly user- facing CLI by design. CRI-O is a similar lower-level runtime built specifically for Kubernetes. LXC, the oldest of them, predates Docker (2008) and is aimed at "system containers", long-lived containers that look more like lightweight VMs with their own init system, rather than Docker's "one process per container" model.

All five share the same OCI image format and the same kernel primitives, so they are interoperable: an image built with docker build runs unchanged under Podman, on containerd, or in a Kubernetes pod. The choice between them is mostly about workflow and operational style, daemon vs daemonless, root vs rootless, application containers vs system containers, rather than about technical compatibility.

Further reading and video