When I was a senior in college, we had a capstone class that required a Docker build & deployment. Out of my group of 10 folks, I was the ONLY one who knew how to use and build with docker (average group project lol).

To save your future groupmates from this tragic fate, here are the 6 components that make up Docker, what each one actually does, and when you'll run into it.

(btw we are doing a Docker & K8s week on The Daily Dev, you WILL be tested on this)

1. Docker daemon

This is the engine. It is a background process that manages, builds, and runs Docker containers. Pretty much everything else on this list is either talking to the daemon or being managed by it.

You almost never interact with it directly. But when people say "Docker is running," this is the thing that's running.

2. Docker client

This is the thing that you actually interact with. Every time you type docker run or docker build, the client is taking that command and shipping it off to the daemon to execute. You use this to manage docker images and containers.

The client and daemon are separate. They usually live on the same machine, but they don't have to. Your client can talk to a daemon on a remote server.

3. Docker image

A read-only template for a container. It's a stack of instructions and files, basically a frozen snapshot of "here's everything this app needs to run."

Simple mental model I use: an image is the class, a container is the instance. You build the image once, then spin up as many identical containers from it as you want.

4. Docker registry

Where images live when they're not on your machine. Docker Hub (my favorite hub btw) is the famous public one, but you'll often run a private registry for your company's images.

It's basically GitHub for images. You push to share, you pull to grab. If you've ever run a container and watched it download layers, that's a registry pull.

5. Docker network

Virtual networks that let containers talk to each other and to the host. Without them, your containers are sadly very alone.

6. Docker Compose

A tool for defining and running multi-container apps from a single file. Instead of running five docker run commands by hand with the right flags every time, you write one YAML file and run docker compose up.

Use when: your app is more than one container, which is basically always. App + database + cache is three containers, and you do not want to wire those up manually.

———

TLDR: the client sends commands to the daemon, which builds images (stored in a registry) and runs them as containers connected by networks. Compose handles many such containers on one machine.

Have a good weekend!
Arjay.

Keep reading