A quick reference for containerd โ the industry-standard container runtime. Bookmark this page.
ctr (containerd CLI)
# List images
ctr images list
ctr -n k8s.io images list # Kubernetes namespace
# Pull image
ctr images pull docker.io/library/nginx:alpine
# Run container
ctr run -d docker.io/library/nginx:alpine my-nginx
# List containers
ctr containers list
ctr -n k8s.io containers list
# List tasks (running processes)
ctr tasks list
# Execute in container
ctr tasks exec --exec-id shell my-nginx sh
# Stop and remove
ctr tasks kill my-nginx
ctr containers delete my-nginx
# Remove image
ctr images remove docker.io/library/nginx:alpineNamespaces
# List namespaces
ctr namespaces list
# Create namespace
ctr namespaces create my-namespace
# Work in Kubernetes namespace
ctr -n k8s.io images list
ctr -n k8s.io containers listSnapshots and Content
# List snapshots
ctr snapshots list
# View content store
ctr content list
# Check disk usage
ctr content ls | awk '{sum += $2} END {print sum/1024/1024 " MB"}'Configuration
# /etc/containerd/config.toml
version = 2
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.k8s.io/pause:3.9"
[plugins."io.containerd.grpc.v1.cri".containerd]
default_runtime_name = "runc"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io"]Tips and Tricks
- Use
crictlfor Kubernetes CRI operations (notctr) - Use
nerdctlfor Docker-compatible CLI with containerd backend - Always specify namespace with
-n k8s.iofor Kubernetes containers - Restart containerd after config changes:
sudo systemctl restart containerd