If you’re asking yourself
🤔 “How should I run applications in my home lab?”
🤨 “Is Docker Compose the right tool for my home lab?”
😫 “How can I manage multiple containers without losing my mind?”
Then you are in the right place.
In this post, I will explain why Docker Compose can be your new best friend, and how to get started with it in the right way.
🐳 What is Docker?
Docker is a platform that run and manage applications using containerization. Containers are boxes that include your app and all of its dependencies.
Have you ever heard of the phrase
😭*“But it works on my machine”*
Maybe the person who said it was not inventing excuses. The next time you hear it, show them Docker.
🧩 What is Docker Compose?
Docker Compose is a tool for defining and running multi-container Docker applications. With Compose, you can use a simple YAML file to describe your entire application services in one place. It’s declarative — meaning you say what you want, not how to do it.
🆚 Declarative vs Imperative
Let’s say you want to run a web server and a database. With the imperative approach, you do this:
docker run -d --name webserver -p 80:80 nginx
docker run -d --name database -e MYSQL_ROOT_PASSWORD=root -d mysql
This is fine… until you forget what you did. And imagine doing that for 20 containers, each with its own configuration and dependencies 😵. With Docker Compose instead, aka the declarative approach:
services:
webserver:
image: nginx
ports:
- "80:80"
database:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: root
Now we are talking!
Easy to read, easy to write, and easy to maintain.
You just run docker-compose up
and you can go have a coffee while Docker Compose does its magic.
🌱 OUT OF TOPIC: A fully declarative Operating System?!
If you are reading this post and thinking
😐 “Whoa, this declarative stuff is amazing…” 😐
(Yes, I know — I’m probably the only one getting hyped about this stuff 😅)
Then you should definitely check out NixOS. It’s a Linux distro where everything is declared in a config file: packages, users, services, even your desktop environment.
🪄 It’s like Docker Compose, but for your whole OS. Not for the faint of heart, but it’s worth considering for your next distro hop.
🛠️ Getting started with Docker Compose
Step 1: Install Docker and Docker Compose 🧑💻
➡️ Official install guide
Step 2: Create your first docker-compose.yml
➡️ Define services, networks, volumes.
➡️ Run: docker-compose up
➡️ Sit back
For everything else:
➡️ Read the docs
🏠 Home lab use cases
Here’s a project structure you can use:
📁your-home-lab/
└── 📁your-home-lab-docker-services/
├── 📁your-blog/
│ └── 📄docker-compose.yml
├── 📁your-password-manager/
│ └── 📄docker-compose.yml
├── 📁your-media-server/
│ └── 📄docker-compose.yml
└── 📁your-other-service/
└── 📄docker-compose.yml
Keep each service separate, keep your sanity intact. Use Git to version control each one.
You could also put everything into a single docker-compose.yml
file —
but unless you’re a big fan of Italian recipes like spaghetti YAML 🍝,
I strongly recommend keeping things modular.
🏁 Final thoughts
Docker Compose is a great first step into the world of reproducible, manageable infrastructure, perfect for home labs and small projects that doesn’t require the scale and complexity of tools like Kubernetes 😨