Containerd
In plain English
Plain definition
Containerd is an industry-standard container runtime that manages the complete container lifecycle on a host, including image transfer, storage, execution and supervision, and is used directly by platforms such as Kubernetes and Docker.
Technical Definition
Containerd is a container runtime that manages the complete container lifecycle on a single host: image transfer and storage, container execution and supervision, low-level storage and network attachments, and other host-level operations. It exposes this functionality through a gRPC API and typically delegates the creation of the isolated process itself to an OCI-compliant lower-level runtime such as runc, using the containerd-shim process to keep each container supervised independently of the main Containerd daemon.
Operational Relevance
Containerd is normally not operated directly by end users. Instead, it sits underneath higher-level orchestration and developer tooling. On a Kubernetes node, the kubelet communicates with Containerd through the Container Runtime Interface (CRI) to create and manage pod containers. On a workstation, tools such as Docker or nerdctl issue the same kind of lifecycle calls. Operational visibility into Containerd typically comes from its own logs, its CLI client (ctr, intended mainly for debugging), and the higher-level tool’s status output rather than from direct end-user interaction.
Architecture Relationship
Containerd occupies the middle layer of the container stack. Above it sit orchestrators and developer-facing tools (Kubernetes, Docker, nerdctl) that decide what should run and where. Below it sits the OCI runtime specification and runtimes such as runc that perform the actual namespace and cgroup isolation using Linux kernel primitives. Containerd bridges these layers: it accepts lifecycle requests through its API, manages image and snapshot storage, and hands off process creation to the lower-level runtime while retaining supervisory responsibility for the resulting container.
Example
A Kubernetes node running Containerd as its configured container runtime will show a containerd process on the host, alongside per-container containerd-shim processes. Inspecting the kubelet configuration confirms the CRI socket path used to reach Containerd, and Containerd’s own logs record image pulls and container lifecycle events independently of what kubectl reports at the cluster level.
Misunderstanding
A common misunderstanding is treating Containerd as equivalent to Docker. Docker is a broader developer-facing toolset that, for its container execution, itself relies on Containerd internally; Containerd on its own does not provide image building, a full CLI aimed at end users, or Compose-style multi-container orchestration. It is a runtime component, not a complete developer platform.
Related Terms
- OCI runtime specification
- runc
- Container Runtime Interface (CRI)
- Kubernetes kubelet
- Docker
Further Reading
Refer to the official Containerd documentation for authoritative detail on API structure, snapshotter plugins and CRI integration, and confirm any version-specific configuration behaviour against the documentation revision matching the deployed release before making operational changes.