Docker Compose lets you define your entire stack — app, database, cache, message queue — in one YAML file. docker compose up starts everything.
The Problem
Your app needs PostgreSQL, Redis, and a background worker. Without Compose:
docker run -d postgres
docker run -d redis
docker build -t myapp .
docker run -d --link postgres --link redis myapp
docker run -d --link postgres --link redis myapp-worker
Five commands. Manual networking. No reproducibility.
With Docker Compose
# docker-compose.yml
services:
app:
build: .
ports: ['3000:3000']
depends_on: [db, redis]
environment:
DATABASE_URL: postgres://user:pass@db:5432/mydb
REDIS_URL: redis://redis:6379
worker:
build: .
command: node worker.js
depends_on: [db, redis]
db:
image: postgres:16
volumes: [pgdata:/var/lib/postgresql/data]
environment:
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
redis:
image: redis:7-alpine
volumes:
pgdata:
docker compose up -d
Entire stack running. Networking handled. Volumes persisted.
What You Get for Free
One-command setup — new team member: git clone && docker compose up
Networking — services communicate by name (app calls db:5432)
Volume management — persistent data survives restarts
Dependency ordering — depends_on ensures correct startup order
Health checks — wait for database to be ready before starting app
Profiles — docker compose --profile debug up for conditional services
Watch mode — docker compose watch rebuilds on file changes
Development Workflow
services:
app:
build: .
volumes:
- .:/app # mount source code
- /app/node_modules # preserve node_modules
command: npm run dev # hot reload
ports: ['3000:3000']
Edit locally, changes reflected in container instantly.
Production vs Development
# Development
docker compose up
# Production (with overrides)
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
If you're running docker run commands manually — Docker Compose makes your setup reproducible in one file.
Need web scraping or data extraction? Check out my tools on Apify — get structured data from any website in minutes.
Custom solution? Email spinov001@gmail.com — quote in 2 hours.
Top comments (0)