Docker Compose — Multi-container

লেসন ২৬ / ৩৮

🎼 Compose Basics

# docker-compose.yml
services:
  web:
    image: nginx:alpine
    ports: ["80:80"]
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - db-data:/var/lib/mysql
volumes:
  db-data:

🚀 Commands

docker compose up -d
docker compose down
docker compose logs -f web
docker compose exec web sh
docker compose restart
docker compose up -d --build

🏗️ LEMP Stack

services:
  nginx:
    image: nginx:alpine
    ports: ["80:80"]
    depends_on: [php]
    restart: unless-stopped

  php:
    build: .
    environment:
      DB_HOST: mysql
      DB_PASSWORD: ${DB_PASSWORD}
    depends_on:
      mysql: {condition: service_healthy}

  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT}
    volumes: [mysql-data:/var/lib/mysql]
    healthcheck:
      test: ["CMD","mysqladmin","ping"]
      interval: 10s

volumes:
  mysql-data:

🔐 .env

DB_PASSWORD=secret
DB_ROOT=root_secret
chmod 600 .env

🌐 Service Discovery

Service name = hostname। php container reaches db at: mysql:3306।

💾 Volume Types

mysql-data:/path       # named (persistent)
./code:/var/www        # bind (host)
tmpfs: [/tmp]          # RAM

🎓 মূল কথা ⭐

1 file = whole stack। Service name = DNS। healthcheck + depends_on = proper startup।