DEV Community

Alex Spinov
Alex Spinov

Posted on

Docker Compose Has a Free Multi-Container Orchestration Tool

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
Enter fullscreen mode Exit fullscreen mode

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:
Enter fullscreen mode Exit fullscreen mode
docker compose up -d
Enter fullscreen mode Exit fullscreen mode

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 orderingdepends_on ensures correct startup order
Health checks — wait for database to be ready before starting app
Profilesdocker compose --profile debug up for conditional services
Watch modedocker 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']
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)