Answers: <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>
  
Answers: CC BY-SA 4.0
Answers: 2019-11-13T16:01:06.410Z
Answers: 2022-08-26T07:26:47.227Z
Answers: 2022-08-26T07:26:47.227Z
Answers: Wesley Rolnick
Body: <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>
  
Comments: CC BY-SA 4.0
Comments: 2019-11-13T13:23:28.977Z
Comments: https://stackoverflow.com/a/41646558/8464140.
Comments: Hedi Nasr
Tags: <docker><kubernetes><containers><open-source>
Title: What's the relationship between ContainerD and Docker?
UserDisplayName: Richard Slater
ThreadText: # 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.
  
  
  ---
  
  