#Docker Compose

Orchestrate multi-container applications.


#Basic docker-compose.yml

yaml
1version: '3.8'
2
3services:
4  web:
5    build: .
6    ports:
7      - "3000:3000"
8    environment:
9      - NODE_ENV=production
10      - DATABASE_URL=postgres://db:5432/app
11    depends_on:
12      - db
13    volumes:
14      - ./uploads:/app/uploads
15
16  db:
17    image: postgres:15
18    environment:
19      - POSTGRES_DB=app
20      - POSTGRES_USER=user
21      - POSTGRES_PASSWORD=secret
22    volumes:
23      - postgres_data:/var/lib/postgresql/data
24
25volumes:
26  postgres_data:

#Commands

bash
1# Start services
2docker compose up
3docker compose up -d          # Detached
4
5# Stop services
6docker compose down
7docker compose down -v        # Remove volumes
8
9# View logs
10docker compose logs
11docker compose logs -f web    # Follow specific service
12
13# Rebuild
14docker compose build
15docker compose up --build
16
17# Scale
18docker compose up -d --scale web=3
19
20# Execute command
21docker compose exec web bash

#Full Stack Example

yaml
1version: '3.8'
2
3services:
4  frontend:
5    build: ./frontend
6    ports:
7      - "3000:3000"
8    depends_on:
9      - api
10
11  api:
12    build: ./backend
13    ports:
14      - "4000:4000"
15    environment:
16      - DATABASE_URL=postgres://db:5432/app
17      - REDIS_URL=redis://cache:6379
18    depends_on:
19      - db
20      - cache
21
22  db:
23    image: postgres:15-alpine
24    volumes:
25      - postgres_data:/var/lib/postgresql/data
26    environment:
27      - POSTGRES_PASSWORD=secret
28
29  cache:
30    image: redis:7-alpine
31
32volumes:
33  postgres_data:

[!TIP] Pro Tip: Use Docker Compose for local development, Kubernetes for production!