Originally, Docker’s runtime was called libcontainer, which was later split into two projects: containerd and runc, both of which were donated to the CNCF around 2017.
containerd is a daemon that manages the entire container lifecycle, including networking, volumes, image building and integrity, bundle history logging, etc; things that runc1 doesn’t do. It complements runc, which implements the OCI runtime-spec, by implementing the image-spec.
There are two ways to interact with containerd:
ctrcli for debugging purposes onlynerdctl— a general purpose cli tool, mimicking the docker-cli UX
Sources
- https://blog.quarkslab.com/digging-into-runtimes-runc.html
- https://kubernetes.io/blog/2022/05/03/dockershim-historical-context/
- https://www.docker.com/blog/containerd-vs-docker/
- https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/containerd