docker-compose.yml Anatomy
compose, FILE, ke, TEEN, MAIN, TOP-LEVEL, KEYS, hote, HAIN: "services" (HAR, container, ki, DEFINITION, — image/build, ports, environment, volumes, waghera), "volumes" (named, volumes, ki, DEFINITION), aur, "networks" (custom, networks, ki, DEFINITION, agar, DEFAULT, se, ALAG, chahiye).
HAR, service, ke, ANDAR, "image" (existing, image, use, karo) YA, "build" (LOCAL, Dockerfile, se, BUILD, karo) mein, se, EK, hota, hai, PLUS, "ports" "environment" "volumes" "depends_on" jaisi, OPTIONS.
services:
api:
build: ./api
ports:
- "3000:3000"
environment:
- NODE_ENV=production
volumes:
- ./api:/app
depends_on:
- db
db:
image: postgres:16
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:- services = har container ki definition (image/build, ports, env, volumes)
- volumes aur networks top-level keys mein alag se define hote hain
- depends_on sirf start order control karta hai, readiness nahi
"build" key, EK, SIMPLE, PATH, (context, directory) ho, sakta hai, YA, EK, DETAILED, OBJECT, ("context" + "dockerfile" + "args") — YE, tab, USEFUL, hai, jab, Dockerfile, ka, NAAM, standard, "Dockerfile" se, DIFFERENT, hai.
services:
app:
build:
context: .
dockerfile: Dockerfile.prod
args:
NODE_VERSION: 20Compose, mein, VOLUME, mapping, "host_path:container_path" (bind, mount) YA, "volume_name:container_path" (named, volume, jo, top-level, "volumes:" mein, DECLARE, hona, ZAROORI, hai) ho, sakta hai.
services:
db:
volumes:
- ./local-data:/data # bind mount
- db-volume:/var/lib/db # named volume
volumes:
db-volume: