Docker vs Podman vs containerd: Container Runtimes Compared
Fast recall
Quick revision
Core answer
Understanding of the container runtime landscape after the K8s 1.24 dockershim removal
Thinking 'Docker was removed from Kubernetes' means images are different — OCI images run on all three runtimes; only the daemon component changed
Explain the OCI standards (image-spec, runtime-spec), the CRI interface, and why rootless Podman is the security default on modern Linux distros
Interview-ready guide
Interview answer
Three tools, three different layers of the same stack. Knowing which layer each one occupies is the whole answer.
Docker — the original full-stack container platform
- Provides a CLI, a build system, a daemon (
dockerd), and image registry tooling all in one product; runs as root by default and requires the daemon to be running for any container operation - Still the most widely-used local development tool because Docker Desktop has the best macOS and Windows polish; the licensing change in 2021 (paid for companies above 250 employees) accelerated migration to alternatives
- Under the hood, modern Docker uses containerd as its runtime — the
dockerddaemon now mostly translates Docker-specific concepts to containerd calls
Podman — the daemonless, rootless alternative
- Drop-in CLI compatibility (
alias docker=podmanworks for 95% of commands); the differences appear in compose files, healthcheck parsing, and edge-case volume behavior - Daemonless model means each
podman runis its own process; combined with rootless mode, a compromised container cannot escalate to root on the host — the security default on Red Hat distributions - First-class pod abstraction (matching Kubernetes pods) and systemd integration via Quadlet make Podman a better fit for single-host production than docker-compose
containerd — the runtime under everything
- Implements the Container Runtime Interface (CRI) that Kubernetes uses to manage pods; since K8s 1.24 removed the dockershim, containerd is the standard CRI runtime in EKS, GKE, AKS, and most self-managed clusters
- You rarely interact with containerd directly — nerdctl is a Docker-compatible CLI for it; ctr is the low-level CLI mostly used for debugging
- The shift from dockershim to containerd was invisible to almost all workloads: OCI images, Kubernetes manifests, and application code all behave identically
Docker vs Podman vs containerd: Container Runtimes Compared
Direct Answer
Docker is a full container platform (CLI + daemon + image builder + registry tooling) running rootful by default. Podman is daemonless and rootless-first, drop-in compatible with most Docker commands, and the standard on RHEL/Fedora. containerd is the lower-level runtime that both Docker and Kubernetes use under the hood. For local dev: Docker Desktop or Podman Desktop are equivalent. For production Kubernetes: containerd is what actually runs your pods (Docker shim was removed in K8s 1.24).
Common Mistakes & Pitfalls
Thinking 'Docker was removed from Kubernetes' means images are different — OCI images run on all three runtimes; only the daemon component changed
Check your understanding
Answer these without looking back at the article.
- What is the OCI specification and why does it matter for runtime portability?
- Why was the dockershim deprecated and removed from Kubernetes?
- How does rootless Podman achieve container isolation without root privileges?
- What is CRI-O and how does it compare to containerd?
Related interview prep categories
2Looking for a structured roadmap?
Every module on this page is also part of the full Java backend interview track.