<p><a href="https://github.com/containerd/containerd" rel="nofollow noreferrer">Containerd</a> is a daemon for running containers.  The <a href="https://www.docker.com/blog/what-is-containerd-runtime/" rel="nofollow noreferrer">Docker blog</a> has a nice write up explaining how this fits into Docker.  While containerd is used in Docker, it can also be used as a daemon for other container solutions.  Containerd requires runc in order to function.</p>
<p><a href="https://github.com/opencontainers/runc" rel="nofollow noreferrer">runc</a> as defined by the project is a &quot;CLI tool for spawning and running containers according to the OCI specification&quot;.</p>
<p>These tools are designed to follow the <a href="https://opencontainers.org/about/overview/" rel="nofollow noreferrer">Open Container Initiative</a> (OCI) specifications.  This has become a standard and defines how Docker and other tooling interacts with containerd and runc.</p>
<p>When you look at most Kubernetes diagrams they will not show <code>containerd</code> or <code>runc</code> as they are abstracted away into the container engine you use (e.g., Docker, rkt).  Because Kubernetes uses <code>containerd</code>, it will also use <code>runc</code>.  This is what allows multiple container solutions that follow OCI specifications to integrate with Kubernetes.</p>
<p>So yes, you could break down how part of Kubernetes is built by looking at <code>runc</code>, <code>containerd</code>, and the container engine.</p>

CC BY-SA 4.0
2019-11-13T16:01:06.410Z
2022-08-26T07:26:47.227Z
2022-08-26T07:26:47.227Z
Wesley Rolnick
<p>I'm aware that Kubernetes uses <code>containerd</code> internally and that <code>containerd</code> is part of Docker.  Does that mean that Kubernetes only uses certain parts of Docker to provide orchestration of containers? Additionally, how does <code>runc</code> fit into this ecosystem, I'm aware Kubernetes uses it because CVEs affecting <code>runc</code> impact Kubernetes.</p>

<p>I've not been able to find out what the technical components of Kubernetes are; there are plenty of diagrams out there showing the logical elements (i.e. masters, nodes, kubelets, deployments, services, pods, etc.). However, I'm trying to get into the details a bit more and understand what parts make up Kubernetes.</p>

<p>Is it possible to describe how Kubernetes is constructed from its components such as <code>runc</code>, <code>containerd</code> and Docker?</p>

CC BY-SA 4.0
2019-11-13T13:23:28.977Z
https://stackoverflow.com/a/41646558/8464140.
Hedi Nasr
<docker><kubernetes><containers><open-source>
What's the relationship between ContainerD and Docker?
Richard Slater
# What's the relationship between ContainerD and Docker?

(Asked by: username_0 on 2019-11-13)

I'm aware that Kubernetes uses `containerd` internally and that `containerd` is part of Docker. Does that mean that Kubernetes only uses certain parts of Docker to provide orchestration of containers? Additionally, how does `runc` fit into this ecosystem, I'm aware Kubernetes uses it because CVEs affecting `runc` impact Kubernetes.

I've not been able to find out what the technical components of Kubernetes are; there are plenty of diagrams out there showing the logical elements (i.e. masters, nodes, kubelets, deployments, services, pods, etc.). However, I'm trying to get into the details a bit more and understand what parts make up Kubernetes.

Is it possible to describe how Kubernetes is constructed from its components such as `runc`, `containerd` and Docker?

**Tags:** docker, kubernetes, containers, open-source

> **Comments:**
> **username_1**: https://stackoverflow.com/a/41646558/8464140.  

---

## 1 answers

### Answer by username_2 on 2019-11-13. Score: 9

[Containerd](https://github.com/containerd/containerd) is a daemon for running containers. The [Docker blog](https://www.docker.com/blog/what-is-containerd-runtime/) has a nice write up explaining how this fits into Docker. While containerd is used in Docker, it can also be used as a daemon for other container solutions. Containerd requires runc in order to function.

[runc](https://github.com/opencontainers/runc) as defined by the project is a "CLI tool for spawning and running containers according to the OCI specification".

These tools are designed to follow the [Open Container Initiative](https://opencontainers.org/about/overview/) (OCI) specifications. This has become a standard and defines how Docker and other tooling interacts with containerd and runc.

When you look at most Kubernetes diagrams they will not show `containerd` or `runc` as they are abstracted away into the container engine you use (e.g., Docker, rkt). Because Kubernetes uses `containerd`, it will also use `runc`. This is what allows multiple container solutions that follow OCI specifications to integrate with Kubernetes.

So yes, you could break down how part of Kubernetes is built by looking at `runc`, `containerd`, and the container engine.


---

