Skip to content

Podman vs Cri-o vs Containerd

I have always used docker to build my images. Docker did many things and contained various parts:

  • Docker engine: powers Docker locally as a portable, lightweight runtime and packaging tool
  • Docker Hub: cloud service to share images
  • docker compose: mechanism to define and run multi-container applications
  • docker swarm: container orchestration for production
  • docker registry: server-side application that stores and distributes Docker images
  • docker machine: tool that lets you install Docker Engine on virtual hosts and manage hosts

The part that does the image building from a Dockerfile is the docker engine.

There was corporate action: Docker Enterprise was acquired by Mirantis, and that shook up the industry.

It was noted that: Kubernetes is deprecating support for Docker as a container runtime starting with Kubernetes version 1.20.

A CRI (Container Runtime Interface) is a standard way of communicating between Kubernetes and the container runtime.

Docker does not implement a CRI and a Docker shim was created by Kubernetes to support it. Docker is a collection of tools that sit on top of containerd

Docker makes the process easier of using the containerd runtime.

If you are using Docker as the container runtime on Kubernetes you will need to remove the middleman.

Confusion: Container Runtime vs Container Engine#

When reading the podman docs they refer to:

  • Container engines: Docker, CRI-O, containerd
  • Container runtimes: runc, crun, runv

Podman vs Cri-o vs Containerd#

So we know now that Docker is not a container runtime and uses containerd behind the scenes.

More info on LWN

Sources#