I have been frequently asked “what’s [Docker] Containerd?” The short answer I gave may be of benefit for the larger community so I am turning this into a short blog post. I hope the condensed format is useful.
Background: What’s the Problem
Docker started a technology (Docker Engine) that allows you to package and run your application in a Linux container on a single host. Linux containers have been around for decades.
Docker made them consumable for the masses. At this point a couple of things happened in parallel:
- The ecosystem started to flourish and more open source projects started to leverage Docker (Engine) as a core building block to run containerized applications at scale on a distributed infrastructure (think Kubernetes).
- Docker Inc. (the company) started working on solving similar problems and decided to embed into the core Docker (Engine) technologies that would help solve the problems of running containerized applications at scale on a distributed infrastructure (think Docker Swarm Mode)
This created a dynamic where Docker and Kubernetes started building similar solutions – one is building solutions to solve problems on a core building block that happens to embed another solution (created by the latter) to solve the same problems and it is creating friction in the industry.
What Happened Next?
Purists and open source advocates are advocating that, by doing so, Docker Inc. is bloating the core building block with additional bugs and instability to make space for code that isn’t needed (when third party solutions are being used). Third party vendors are claiming that Docker Inc. is creating an artificial funnel and path with commercial interest. The general fear is rooted in (1) using Docker (Engine) for free results in (2) enabling Swarm Mode for free leads to (3) buying Docker Data Center. The industry has started to bifurcate to either forking Docker (Engine) or building a completely separate container runtime.
Docker has announced Containerd (https://containerd.io/), an open-source project that the industry can use as a common container run-time to build added value on top (e.g. container orchestration, etc.)
Containerd is a daemon that runs on Linux and Windows, and it can be used to manage the container lifecycle including tasks such as image transfer, container execution, some storage and networking functions. With Containerd, Docker has evolved again to below:
There are many questions such as how Containerd will be packaged, how current Docker Engine will be re-packaged, etc. that have yet to be answered. I will write another blog to follow up, and look forward to hearing your thoughts.