Essential commands for Docker development & maintenance
Build and start all services defined in docker-compose.yml
docker compose up --buildStop and remove all containers, networks created by up
docker compose downFull restart with rebuild (use after code/config changes)
docker compose down
docker compose up --buildRebuild only the services you changed (faster than full rebuild)
# Rebuild backend only
docker compose build backend
# Rebuild frontend only
docker compose build frontend
# Then restart with:
docker compose up -dView all running containers in the project
docker compose psStream logs from specific services (-f follows logs in real-time)
# Backend logs
docker compose logs -f backend
# Frontend logs
docker compose logs -f frontend
# MongoDB logs
docker compose logs -f mongo
# Phoenix observability logs
docker compose logs -f phoenix
# All logs
docker compose logs -fVerify MongoDB is running and check uptime
docker compose exec mongo mongosh --eval 'db.serverStatus().uptime'Test backend API and view automatic documentation
curl http://localhost:8003/docsOr open in browser:
open http://localhost:8003/docs
# Windows: start http://localhost:8003/docs
# Linux: xdg-open http://localhost:8003/docsOpen frontend application in browser
open http://localhost:3000
# Windows: start http://localhost:3000
# Linux: xdg-open http://localhost:3000Access Phoenix observability dashboard for monitoring
open http://localhost:6006
# Windows: start http://localhost:6006
# Linux: xdg-open http://localhost:6006docker compose logs -f service_name to debug startup issuesdocker statsStop all running containers before cleanup
docker compose downRemove all build cache (typically frees ~15+ GB)
docker builder prune -afClean up dangling and unused images (keeps active ones)
# Remove dangling image layers
docker image prune -f
# Remove all unused images
docker image prune -a -fRemove stopped containers and unused networks
docker container prune -f
docker network prune -fOnly if you can afford to lose persistent data
# List volumes first to see what will be deleted
docker volume ls
# Prune unused volumes
docker volume prune -fRemove all unused containers, networks, images (dangling and unreferenced), and build cache
docker system prune -afdocker system df to check disk usage before and after cleanupdocker image ls to see what images you have before pruningEnable BuildKit for faster, more efficient builds with better caching
# Add to your ~/.bashrc or ~/.zshrc
export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1
# Or run before each build:
DOCKER_BUILDKIT=1 docker compose buildPrevent unnecessary files from being sent to Docker daemon
# Create .dockerignore file in project root:
.git
.venv
venv
node_modules
.next
dist
build
storage
__pycache__
*.pyc
*.log
*.md
.DS_Store
.env.local
.idea
.vscode
coverage
.pytest_cacheRegularly check Docker disk usage to prevent bloat
# Check overall Docker disk usage
docker system df
# Detailed breakdown with verbose output
docker system df -vUse multi-stage builds to reduce final image size
# Example Dockerfile with multi-stage build
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]Run services locally when possible, use Docker only for infrastructure
# Example: Run frontend + backend locally
# Keep only databases/services in Docker
# 1. Start only infrastructure
docker compose up mongo phoenix
# 2. Run backend locally
cd backend && python main.py
# 3. Run frontend locally
cd frontend && npm run devRebuild only what changed instead of everything
# Instead of full rebuild:
docker compose build
# Only rebuild specific service:
docker compose build frontend
docker compose build backend
# Use --no-cache when needed:
docker compose build --no-cache backend.dockerignore to speed up builds and reduce image sizedocker compose up -d to run in detached modealias dc='docker compose'docker compose logs -f for debuggingdocker system prune -f to clean updocker system prune -af