Docker was one of those things I kept hearing about but put off learning for ages. When I finally sat down and figured it out, I couldn't believe how much time I'd wasted not using it. This is the intro I wish someone had given me.
The problem Docker solves
The classic problem in software is "it works on my machine." You set something up on your machine, it runs fine, you move it somewhere else and it breaks because the other machine has different software, different versions, different configuration. Docker solves this by packaging your application and everything it needs into a single unit called a container. The container runs the same way everywhere.
Images vs containers
An image is the blueprint. A container is a running instance of that blueprint. You can run multiple containers from the same image. Images are built from a Dockerfile which just describes what goes in them — what base OS, what software to install, what files to copy in, what command to run.
A basic example
Running AdGuard Home in Docker looks like this:
docker run -d \ --name adguardhome \ -p 53:53/udp \ -p 3000:3000 \ -v /opt/adguard/data:/opt/adguardhome/work \ adguard/adguardhome
That pulls the AdGuard Home image, starts a container, maps the ports, and mounts a volume so the data persists even if the container restarts. One command and it's running.
Docker Compose
Once you have more than one container, managing them with individual docker run commands gets messy. Docker Compose lets you define all your containers in a single docker-compose.yml file and start them all with docker compose up -d. My NAS media stack — qBittorrent, Prowlarr, Radarr, Sonarr, Plex — all runs from one Compose file.
Why it's worth learning
Once you get comfortable with Docker, deploying services becomes trivial. New service? Find the image, write a quick Compose entry, done. Something breaks? Tear down the container and start fresh — your data is safe in the volume. Want to move everything to a new machine? Copy the Compose file and the data volumes. That's genuinely it.