Docker vs OCI Tooling

Where Docker's Own Code Ends and OCI Tooling Begins

Docker 514 's apt repository installs six packages (Official Apt Repository), and only some of them are Docker's own code:

Which parts of a Docker installation are Docker's, and which are shared OCI and CNCF tooling
Component Package Project, license Replaceable by
docker CLI docker-ce-cli docker/cli, Apache 2.0 Podman 47,580 , nerdctl 10,397
dockerd docker-ce moby/moby, Apache 2.0 Podman, CRI-O 669,542
BuildKit 10,294 , Buildx 4,514 docker-buildx-plugin moby/buildkit, Apache 2.0 Buildah 919,369
Compose 514 docker-compose-plugin docker/compose, Apache 2.0 podman-compose 6,226
containerd 234,762 , shim containerd.io CNCF, Apache 2.0 CRI-O
runc 13,463 containerd.io OCI, Apache 2.0 crun 4,136 , youki, gVisor 482,968

Docker's own code is the developer experience: the CLI, dockerd's networking, volumes and API, Compose, and the BuildKit front ends. Everything from containerd down is shared infrastructure that Kubernetes 5,150 , cloud providers and the Podman ecosystem use too, packaged here as containerd.io with runc inside. That split is why Kubernetes's Kubernetes cluster runs BookNest's image with no Docker installed, and why crun, a runc alternative written in C, can be registered in daemon.json and chosen with docker run --runtime without rebuilding an image.