dockerd vs docker-containerd vs docker-runc vs docker-containerd-ctr vs docker-containerd-shim
Asked Answered
P

4

76

This stuff is really getting confused now. Can someone please explain what's going on. Just the straight one liner difference.

  • dockerd
  • libcontainerd
  • containerd
  • docker-containerd
  • docker-runc
  • docker-containerd-ctr
  • docker-containerd-shim

thanks

Pinwork answered 9/10, 2017 at 15:7 Comment(0)
W
81

dockerd - The Docker daemon itself. The highest level component in your list and also the only 'Docker' product listed. Provides all the nice UX features of Docker.

(docker-)containerd - Also a daemon, listening on a Unix socket, exposes gRPC endpoints. Handles all the low-level container management tasks, storage, image distribution, network attachment, etc...

(docker-)containerd-ctr - A lightweight CLI to directly communicate with containerd. Think of it as how 'docker' is to 'dockerd'.

(docker-)runc - A lightweight binary for actually running containers. Deals with the low-level interfacing with Linux capabilities like cgroups, namespaces, etc...

(docker-)containerd-shim - After runC actually runs the container, it exits (allowing us to not have any long-running processes responsible for our containers). The shim is the component which sits between containerd and runc to facilitate this.

Wishful answered 9/10, 2017 at 15:47 Comment(4)
Would you list a source for the above? Thanks.Housemaid
Resources for what the pieces do? Or how they interact? This article (hackernoon.com/…) is probably a good start, good diagram at the bottom.Wishful
@Wishful looks like hackernoon took down that post you've linked to. Any other references that would be helpful?Lyman
web.archive.org/web/20170509155503/https://hackernoon.com/… @AthirNuaimiWishful
P
20

From the documentation:

runC is built on libcontainer which is the same container library powering a Docker engine installation. Prior to the version 1.11, Docker engine was used to manage volumes, networks, containers, images etc.. Now, the Docker architecture is broken into four components:

Docker engine 
containerd
containerd-shm
runC. 

The binaries are respectively called:

docker
docker-containerd
docker-containerd-shim
docker-runc.

Image

https://medium.com/faun/docker-containerd-standalone-runtimes-heres-what-you-should-know-b834ef155426

Pinwork answered 9/10, 2017 at 15:40 Comment(0)
B
9

High-level picture for further better understanding: (read other good answers before this)

Architecture

Curated pictures collection for quick understanding:

enter image description here

enter image description here

enter image description here

Sources:

  1. Containerd
  2. blog.caoyu.info
  3. Twitter

There is a reason for this saying "A picture is worth a thousand words"

Bulger answered 16/12, 2021 at 5:4 Comment(2)
This doesn't help with understanding at all (in particular the image you called "architecture".) For starters, the image doesn't explain where dockerd sits, and there's no indication of what piece in a layer uses what othe piece in another layer, what's the communication or control flows are. Most importantly, it doesn't explain the justification/use case. Without that, we don't have an architectural diagram. We just have a powerpoint slide without labels ;)Acis
As I mentioned, this is a high-level picture. So, obviously, it is not for starters/beginners. Expecting some knowledge on docker-<components> before checking this out. I felt somehow it helps me to understand the overall picture related to this question, hence added this for people like me who comes here. Feel free to edit this answer with whatever relevant info you want to add :)Bulger
U
1

I know it was an old question but our team has not upgraded our Kubernetes to 1.24+ because "Kubernetes support for Docker via dockershim is now removed." still causes quite some confusion in 2023 inside our team, so I would like to add these three pictures from https://www.tutorialworks.com/difference-docker-containerd-runc-crio-oci/

containers

How docker works with containerd

docker

How k8s uses CRI

k8s

Unpen answered 13/12, 2023 at 4:26 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.