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 toolDocker Hub: cloud service to share imagesdocker compose: mechanism to define and run multi-container applicationsdocker swarm: container orchestration for productiondocker registry: server-side application that stores and distributes Docker imagesdocker 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.