docker compose watch în Docker

Compose și Dezvoltare Rapidă Docker Compose v2.22+

Sincronizarea automată a fișierelor de cod modificate direct în containerul activ fără a fi nevoie de rebuild sau repornire manuală.

Sintaxă comandă
docker compose watch

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`.

Ghiduri și noțiuni înrudite