So many ‘Dockers’, so little time
One of the first barriers in learning Docker is identifying all the elements of its ecosystem, many of which share the same core name. This walkthrough aims to disambiguate those pieces of the puzzle.
Docker operates using a client-server setup, where the Docker client can connect to the Docker host either locally or remotely. Both the Docker client and host (daemon) can reside on the same machine, or they can be on separate systems and communicate through sockets or a REST API.
The Docker client serves as the primary means of interaction for many Docker users. By issuing commands such as “docker run”, the client sends instructions to the Docker daemon which then executes them. The Docker API is used by the Docker command (CLI). It is possible for the Docker client to connect with multiple daemons simultaneously
Docker Engine
Docker Engine can be thought of, appropriately enough, as the “engine” upon which Docker images and their resulting containers are run.
Built on containerd and robustly interoperable across systems, this is the “main event” of Docker, with three main subcomponents:
dockerd Daemon
dockerd is the name for the persistent process, or daemon, behind the Docker Engine. This is also sometimes referred to as the Docker client.
Docker CLI
Docker CLI is the command line interface that you run in a terminal or shell with the simple command ‘docker’. Following Linux norms, once you have Docker CLI installed you can enter ‘docker help’ to view its man page, or list of available commands and options.
Docker API
Docker Engine API is a Representational State Transfer Application Programming Interface, or a REST API.
This makes it easier for programmers to build applications which interface with Docker Engine. Learn more about Web APIs here.
Docker Desktop
Docker Desktop is a desktop application available for MacOS or Windows, to provide an easier workflow for the Linux-centric Docker ecosystem.
Docker Apps
Docker App provides Docker Engine’s CLI with a plug-in allowing the ‘docker app’ command to essentially containerize app development, making it simpler to build the Docker workflow into application development.
Docker-Compose
Docker-Compose is the most frequently used tool across environments for more complex interaction with Docker Apps. Check out the Compose documentation for more.
Docker Hub
Docker Hub is the most prominent of available registries for exploring and sharing container images, kind of like Github for Docker.
Docker Swarm
Rather than a tool or platform, Docker Swarm, or swarm mode, is exactly what it sounds like: central management of a cluster of Docker Engines controlled through Docker CLI.
Docker Platform Beyond Docker Variants
The Docker platform also contains other crucial tooling, not all of which has the name “Docker” in it. One example is Kubernetes, an “orchestration platform” for coordinating shared infrastructure and operations around containers.
Similarly, Notary is a Docker platform tool which enables users to sign collections of content, verify their integrity, and confirm their origin.
Finally, Docker Credential Helpers is a suite of smaller programs to help keep login credentials safe.
Putting It All Together
If you’re still confused about the different moving parts when interacting with Docker, their documentation has a great diagram of the overall architecture.