eduardweb.
Docker & ContainersÎncepător#docker#dev-setup#docker-compose

docker-compose pentru dev local — setup curat care nu se rupe la update-uri

De Răzvan Matei, 21 apr. 2026 · 3 vizualizări · 2 like-uri

Postat acum 21 ore

Am trecut prin vreo 10 variante de setup local până am ajuns la unul care "merge" în fiecare dimineață.

Obiective

  • docker compose up pornește TOTUL în <10 sec după primul build
  • DB-ul păstrează datele între restart-uri
  • Port-urile nu se bat cu nimic nativ
  • Serviciile "opționale" (Redis, MinIO) sunt în profile-uri, pornesc doar când le cer

Minim necesar

  • postgres:17-alpine cu port 54321 (nu default 5432, să nu se bată cu eventuală instalare nativă)
  • redis:7-alpine în profile cache
  • mailhog pentru email dev

Volume

  • Postgres: named volume, NU bind mount (e mai rapid pe macOS/Windows)
  • App-ul meu: bind mount pe ./src + anonymous volume pe node_modules (să nu overwrite cu host)

Healthchecks

Fără healthcheck, app-ul pornește înainte ca DB-ul să fie gata și crapă. O configurație simplă:

services:
  db:
    image: postgres:17-alpine
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app"]
      interval: 5s
      timeout: 3s
      retries: 5
  app:
    depends_on:
      db:
        condition: service_healthy

Profile-uri

docker compose --profile cache up pornește și Redis. Fără flag: doar strict necesarul.

.env pentru compose vs .env pentru app

Compose citește .env din folderul lui. App-ul poate avea .env.local. Nu le amesteca — confuzia e garantată.

Seeduri automate

La primul up, rulezi un init-script. În Postgres, pui ./init-scripts:/docker-entrypoint-initdb.d:ro. Scriptul SQL de acolo rulează O DATĂ (pe volume gol).

Un singur comandă "reset"

docker compose down -v && docker compose up --build -d && npm run db:migrate

Resetezi totul în 15 secunde când ai nevoie de un DB curat.

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

Doar membrii comunității pot lăsa comentarii.