🎼 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।