How these two compare? As far as I understand, runC is a runtime environment for containers. That means that this component provides the necessary environment to run contain
runc
is one of the component of containerd
and handles kernel level interaction for running containers. In earlier versions, containerd
was essentially a high level abstraction around runc
but now it's way more than that. From container.io:
runc is a component of containerd, the executor for containers. containerd has a wider scope than just executing containers: downloading container images, managing storage and network interfaces, calling runc with the right parameters to run containers.
This image from same source nicely describes this.
Docker Engine is the end user product that uses containerd
as a main component and implements other functionalities that doesn't fall under containerd
's scope.
Note that Docker extracted out containerd
as a separate component, so it can be used and developed by others products too.
[Edit] I wrote more about this teminology here