Dezvoltarea aplicațiilor containerizate a suferit istoric de o latență frustrantă: fie montai volume bind (`volumes: – .:/app`) care creau probleme de permisiuni pe Linux și latențe de disc pe macOS, fie trebuia să dai `docker compose up –build` la fiecare modificare de cod.
Comanda modernă docker compose watch a introdus un mecanism nativ de Hot Reload administrat de daemonul Docker. Prin secțiunea declarativă develop.watch din `compose.yaml`, definești reguli precise de sincronizare.
Când salvezi un fișier de frontend sau un controller de backend, Docker copiază instant doar fișierul modificat în container (`action: sync`); dacă modifici `package.json` sau `requirements.txt`, Docker declanșează automat un rebuild inteligent în fundal (`action: rebuild`).
Sintaxă, opțiuni și concepte cheie
| Opțiune / Concept | Descriere practică |
|---|---|
action: sync |
Copiază instantaneu fișierele modificate din host direct în containerul pornit. |
action: rebuild |
Construiește o imagine nouă și înlocuiește containerul când se schimbă dependențele cheie. |
action: sync+restart |
Sincronizează fișierul și repornește procesul din container fără a re-crea containerul. |
ignore |
Lista fișierelor sau directoarelor excluse de la monitorizare (ex. `.git`, `node_modules`). |
Exemple practice și cod
Exemplul 1: Configurarea directivei develop.watch în compose.yaml pentru Node.js
Structura optimă pentru dezvoltare fluidă cu sincronizare live.
# compose.yaml
services:
web:
build: .
ports:
- "3000:3000"
develop:
watch:
- path: ./package.json
action: rebuild
- path: ./src
target: /app/src
action: sync
# În terminal lansăm procesul de urmărire:
$ docker compose watch
Watching for changes in services: web
[web] Syncing ./src/App.tsx -> /app/src/App.tsx
Rezultat & Impact
Modificările se reflectă în browser în mai puțin de 100ms cu zero timp pierdut pe rebuild.
Greșeli frecvente și bune practici
- Rularea comenzii pe containere de producție; `watch` este strict destinat mediului local de dezvoltare.
- Omiterea căii `target` corespunzătoare din interiorul containerului la acțiunea `sync`.