Docker uses a client-server architecture. The docker CLI is the client. It sends each command over a REST API to the Docker daemon, dockerd, which builds, runs and distributes containers.
Its main components:
The Docker client is the command-line interface, and it can talk to a local or remote daemon.
The Docker daemon is a background service that manages containers, images and networks.
An image is a read-only template used to create containers.
A container is a running instance of an image.
A registry stores images. Docker Hub is the default public registry, and you can also run a private one.
Docker Engine is the complete platform: the daemon, its REST API and the CLI.
Below the daemon, containerd manages each container's lifecycle, and it uses runc to create the container itself.
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.