docker run

  • You only need to start one service (e.g., Redis, Postgres).
  • You want a quick, temporary local setup for testing.
  • You don’t need to coordinate networking/env/volumes across multiple services.
docker run -d \
  --name redis-local \
  -p 6379:6379 \
  -v redis_data:/data \
  redis:7 \
  redis-server --appendonly yes --requirepass "Password"
docker stop redis-local
docker start redis-local
docker rm -f redis-local   # delete container

docker compose

  • start multiple services together (e.g., api + redis + db).
  • need docker-compose.yml
    • only need a Dockerfile if you’re building an image from your own code.
  • Want a reproducible, shareable dev environment (one command for the whole team).
  • Services need to talk to each other on a private Docker network, using service names as hostnames (e.g., your API connects to Redis via REDIS_HOST=redis).
docker compose up -d --build
docker compose down