Container Service for Kubernetes (ACK) supports three container runtimes: containerd, Sandboxed-Container, and Docker. This topic compares their supported cluster types, feature limitations, deployment architectures, and CLI commands to help you choose the right runtime for your workloads.
Docker runtime is discontinued. If your cluster runs Docker, migrate to containerd. For instructions, see Migrate from Docker to containerd.
How container runtimes fit into a Kubernetes node
A container runtime manages the execution and lifecycle of containers on each node. kubelet communicates with the runtime through the Container Runtime Interface (CRI) to start, stop, and monitor containers. Your choice of runtime determines the isolation model, supported node types, and which CLI tools you use to manage containers.
ACK supports the following runtimes:
-
containerd — The recommended runtime for most workloads. Lightweight and directly CRI-compliant, with no intermediate daemon layer.
-
Sandboxed-Container — Uses lightweight VMs (runV) to run each pod in an isolated kernel.
-
Docker (discontinued) — Deprecated and no longer receiving maintenance. Migrate to containerd.
Comparison in terms of implementations and limits
|
Feature |
containerd |
Sandboxed-Container |
Docker (discontinued maintenance) |
|
Cluster types |
|
|
All types of ACK clusters |
|
Kubernetes version |
Version 1.20 or later |
Kubernetes 1.16 or later |
Kubernetes 1.22 and earlier |
|
Node type |
|
Only ECS Bare Metal Instance families are supported |
ECS |
|
Node operating system |
Container Service for Kubernetes provides public images for operating systems such as Alibaba Cloud Linux 3 container-optimized version, ContainerOS, Alibaba Cloud Linux 3, Ubuntu, and Windows. For more information, see Operating systems. |
|
|
|
Container engine |
containerd |
containerd |
Docker |
|
Monitoring |
Supported |
Supported |
Supported |
|
Container log collection |
Supported |
Manual injection (sidecar). See Use CRDs to collect container text logs in sidecar mode. |
Supported |
|
Container stdout collection |
Supported |
Supported |
Supported |
|
RuntimeClass |
Not supported |
Supported (runV) |
Not supported |
|
Pod scheduling |
No configuration required. |
You must add configurations based on the following rules:
|
No configuration required. |
|
HostNetwork |
Supported |
Not supported |
Supported |
|
Node data disk |
Optional |
Required. The data disk must be at least 200 GiB. |
Optional |
|
Network plug-in |
|
|
|
|
kube-proxy mode |
|
|
|
|
Volume plug-in |
CSI plug-in (excluding ACK Edge clusters) |
CSI plug-in |
CSI plug-in |
|
Container root file system |
OverlayFS |
OverlayFS with disk quota configuration |
OverlayFS |
You cannot deploy Docker and Sandboxed-Container on the same node. To run both runtime types in a cluster, create separate node pools — one for Docker runtime nodes and one for Sandboxed-Container runtime nodes.
Sandboxed-Container is implemented on top of containerd. When you inspect Sandboxed-Container nodes with kubectl get node or view the node list in the ACK console, the runtime is displayed as containerd.
Comparison in terms of deployment architectures
The deployment architecture shows the component call chain from kubelet down to the containers. Fewer layers mean lower overhead and less operational complexity.
|
Runtime |
Deployment architecture |
|
Docker |
|
|
containerd |
|
|
Sandboxed-Container v2 |
|
containerd removes the dockerd layer that Docker requires, giving kubelet direct CRI access to the runtime. Sandboxed-Container v2 extends containerd with an additional shim (containerd-shim-runv2) that runs pods inside lightweight VMs using runV, enabling kernel-level isolation alongside standard runC containers on the same node.
CLI commands for containerd and Docker
containerd and Docker use different CLI tools to manage images and containers. crictl is the recommended tool for containerd because it operates at the CRI level and is consistent across Kubernetes environments. ctr is containerd's lower-level CLI and is available as an alternative.
|
Operation |
crictl (recommended for containerd) |
ctr (containerd lower-level CLI) |
docker |
|
Query containers |
|
|
|
|
Query container details |
|
|
|
|
Query container logs |
|
N/A |
|
|
Run commands in containers |
|
N/A |
|
|
Attach local stdin, stdout, and stderr to containers |
|
N/A |
|
|
Query resource usage statistics |
|
N/A |
|
|
Create containers |
|
|
|
|
Start containers |
|
|
|
|
Stop containers |
|
ctr -n k8s.io task pause <container> |
|
|
Delete containers |
|
|
|
|
Query images |
|
|
|
|
Query image details |
|
N/A |
|
|
Pull images |
|
|
|
|
Push images |
N/A |
|
|
|
Delete images |
|
|
|
|
Query pods |
|
N/A |
N/A |
|
Query pod details |
|
N/A |
N/A |
|
Start pods |
|
N/A |
N/A |
|
Stop pods |
|
N/A |
N/A |