Skip to content

Getting Started

Verified against the 2.x series (pinned commit e96fd14b8). Commands assume a Linux host with root and that you install runc and CNI plugins alongside containerd.

Prerequisites

  • A Linux host with root or sudo.
  • runc on PATH (the default OCI runtime containerd execs).
  • CNI plugins installed if you want container networking.

Install

Install the official release binaries, runc, and CNI plugins from the GitHub releases. The daemon binary is containerd, the debug CLI is ctr, and the runc shim is containerd-shim-runc-v2.

bash
# Download and extract containerd (replace VERSION with the release you want)
tar Cxzvf /usr/local containerd-VERSION-linux-amd64.tar.gz

# runc
install -m 755 runc.amd64 /usr/local/sbin/runc

# CNI plugins
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-VERSION.tgz

A first working setup

The shortest path to a running container is to generate the default config, start the daemon, then pull and run an image with ctr.

  1. Generate the default configuration.

    bash
    mkdir -p /etc/containerd
    containerd config default > /etc/containerd/config.toml
  2. Start the daemon (use the bundled systemd unit in production; this runs it in the foreground for a first look).

    bash
    containerd
  3. In another shell, pull an image and run it.

    bash
    ctr image pull docker.io/library/hello-world:latest
    ctr run docker.io/library/hello-world:latest test

You should see the hello-world banner printed, ending with a line that begins Hello from Docker!.

Verify it works

Confirm the daemon answers on its socket and lists what it knows:

bash
ctr version
ctr namespace list
ctr container list

ctr version prints matching client and server versions when the daemon is reachable on /run/containerd/containerd.sock. For Go programs, connect with client.New("/run/containerd/containerd.sock").

Where to go next

For Kubernetes, the kubelet uses containerd through the CRI socket at /run/containerd/containerd.sock; configure the CRI plugin in config.toml. For production concerns such as systemd integration, registry authentication, snapshotter selection, and isolation runtimes, see the official site and the runtime-v2 README.