World map

 

BM: Baca dalam Bahasa Melayu

World D6: Under the Hood

OCI, containerd and runc

You will learn: who really starts a container, the shared OCI rules, and why Kubernetes runs your images without Docker.

Checked with Docker Engine 29 on 31 Oct 2026

The problem

Your teammate panics: “Kubernetes dropped Docker! All our images are useless!” Is that right?

Pick one answer.

Watch

docker info lists the runtimes (runc), the default runtime runc, and the containerd version, between the Cgroup Version and Security Options lines. Docker transcript: $ docker info Client: Docker Engine - Community Version: 29.9.2 Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc.) Version: v0.38.1 Path: /usr/libexec/docker/cli-plugins/docker-buildx compose: Docker Compose (Docker Inc.) Version: v5.6.1 Path: /usr/libexec/docker/cli-plugins/docker-compose Server: Containers: 1 Running: 1 Paused: 0 Stopped: 0 Images: 1 Server Version: 29.9.2 Storage Driver: overlayfs driver-type: io.containerd.snapshotter.v1 Logging Driver: json-file Cgroup Driver: systemd Cgroup Version: 2 Runtimes: io.containerd.runc.v2 runc Default Runtime: runc Init Binary: docker-init containerd version: b7a25261e029d68978bbf290df0a62fc819b3c51 runc version: v1.5.2-0-g29dd3dc2 init version: de40ad0 Security Options: apparmor seccomp Profile: builtin cgroupns Kernel Version: 6.18.44-fc-v185 Operating System: Ubuntu 24.04.5 LTS OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 15.71GiB Name: laptop Docker Root Dir: /var/lib/docker

Your laptop~

  • Laptop port 8080 → web port 80

Lunchboxes (containers)

  • webrunning
    from nginx:1.30-alpine 8080→80

Frozen packs (images)

  • nginx:1.30-alpine8 layers · 93.5MB · in use

1 containers (1 running), 1 images, 0 lockers.

Docker is a team. docker info names two helpers: containerd and runc. runc: The runtime that sets up the booth: it switches on namespaces and cgroups, starts your app, then leaves. builds the booth (namespaces, cgroups), starts your app, then leaves.

Try it

containerd: The kitchen manager: it keeps images and starts and watches containers. Docker and Kubernetes both use it. is the kitchen manager. It keeps the packs and watches the boxes. Put the relay in order, first at the top.

First step at the top. Put these in order. Use the arrows, or drag.

  • Your app runs as PID 1
  • containerd, the kitchen manager, gets the pack ready
  • containerd-shim stays to watch this one box
  • dockerd, the front counter, takes the order
  • You type docker run
  • runc switches on namespaces and cgroups, then leaves

Try it

OCI: Open Container Initiative: shared rules for images and for running them, so any runtime can cook any pack. writes the shared rules. Think standard tray sizes: every oven fits them. Sort each one.

Drag a card into a box. Or tap the card, then tap the box.

      Predict

      Kubernetes 1.24 removed dockershim, its translator for Docker. What starts containers on each machine now?

      Pick one answer.

      Check

      Tap each year to see how we got here.

      Tap each point on the timeline.

      You did it!

      You can now explain who really runs a container, and why Kubernetes doesn’t need Docker.

      Go deeper (optional)

      Other runtimes follow the same runtime spec, like crun, gVisor and Kata Containers. A shim lets containerd restart without stopping your boxes. Kubernetes can still use Docker Engine through the cri-dockerd adapter.

      Real mission

      1. docker info
      2. docker run -d --name web nginx:1.30-alpine
      3. ps -ef | grep containerd-shim
      4. docker rm -f web

      0 of 4 steps done · Your ticks are saved.