Docker Compose cho Laravel từ A-Z — Docker Deep Dive [Phần 8]
Tool orchestrator cho multi-container app. Một file docker-compose.yml định nghĩa toàn bộ stack: app, nginx, mysql, redis. Hiểu services, volumes, networks, depends_on, environment.
Tool orchestrator cho multi-container app. Một file docker-compose.yml định nghĩa toàn bộ stack: app, nginx, mysql, redis. Hiểu services, volumes, networks, depends_on, environment.
Không dùng docker-compose, chạy Laravel app bằng docker run: PHP-FPM container + Nginx container + MySQL container. Kết nối qua Docker network. Mục đích: hiểu docker-compose làm gì đằng sau.
Container = Image + writable layer. Container là ephemeral (tạm thời) — dữ liệu mất khi xóa. Hiểu docker run, exec, stop, rm, logs, inspect.
2 loại: Named volume (mysql_data:/var/lib/mysql — Docker quản lý, dùng cho DB) và Bind mount (.:/var/www/html — map trực tiếp folder host, dùng cho source code dev).
Dockerfile giống như một "recipe" — mỗi bước (instruction) thêm một lớp nguyên liệu lên trên lớp trước. Docker cache từng layer, nên thứ tự lệnh quyết định tốc độ build.
Image = bản snapshot read-only từ Dockerfile. Mỗi lệnh (RUN, COPY, ADD) tạo một layer. Layer được cache → build lần 2 nhanh hơn. Đây là lý do COPY composer.json trước COPY . . để tận dụng cache.
Mỗi container là một căn hộ với địa chỉ riêng. Docker Network là hệ thống ống nước/dây điện kết nối các căn hộ lại với nhau. Không có network = các căn hộ cô lập hoàn toàn.
Container không phải máy ảo — nó chỉ là một Linux process bị cô lập. Bài viết giải mã Docker từ first principles: Namespaces, Cgroups, Union FS và kiến trúc Docker Engine.