Ce rezolvă Docker
Docker rezolvă problema „merge pe calculatorul meu". Un container împachetează aplicația împreună cu tot ce-i trebuie ca să ruleze — versiunea exactă de limbaj, bibliotecile, configurarea. Aceeași imagine rulează identic pe laptopul tău, pe cel al colegului, în CI și în producție.
Container vs. mașină virtuală
O mașină virtuală emulează un calculator întreg, cu propriul sistem de operare — grea, lentă la pornire. Un container împarte kernelul sistemului gazdă și izolează doar procesul și dependențele lui — pornește în secunde, ocupă puțin.
Concepte de bază
- Imagine: șablonul, read-only. Conține sistemul de fișiere și configurarea aplicației.
- Container: o instanță care rulează dintr-o imagine. Efemer — poate fi șters și recreat.
- Volum: stocare persistentă, în afara ciclului de viață al containerului (baza de date, upload-uri).
- Rețea: cum comunică containerele între ele și cu exteriorul.
- Registry: unde se publică și se descarcă imagini (Docker Hub, GitHub Container Registry).
De ce contează pentru un developer
- Onboarding: un coleg nou rulează `docker compose up` și are tot mediul, în minute.
- Consistență: nimeni nu mai are „altă versiune de PHP".
- Izolare: proiecte diferite cu versiuni diferite, fără conflicte pe mașina ta.
- Paritate: dev seamănă cu producția.
Instalare
Docker Desktop pe Windows/Mac, Docker Engine pe Linux. Verifici cu `docker --version` și `docker run hello-world`.
Exercițiu
Instalează Docker. Rulează `docker run hello-world`, apoi `docker run -it ubuntu bash` — ești într-un container Ubuntu izolat. Rulează câteva comenzi, ieși cu `exit`, și observă cu `docker ps -a` că containerul s-a oprit.
Greșeli frecvente
- Confunzi imaginea (șablon) cu containerul (instanță care rulează).
- Te aștepți ca datele să persiste într-un container fără volum.
- Crezi că Docker e o mașină virtuală — modelul e diferit.
- Nu cureți niciodată imagini/containere vechi și umpli discul.
De reținut
- Container = aplicația + mediul ei, izolate, reproductibile, ușoare.
- Imagine (șablon) → container (instanță).
- Volume pentru date persistente; rețele pentru comunicare.
- Beneficiul principal: consistență între dev, CI și producție.
Pe scurt
Docker împachetează aplicația cu mediul ei. Un container pornește rapid, e izolat, și rulează la fel peste tot.