Docker for Backend & AI Engineers
Trang chủ / Module 12
🔍 Module 12 / 12 · 1-2 tuần

Debugging, Observability & Dự án capstone

Logs, exec, inspect, resource limits, healthcheck nâng cao, và dự án capstone container hoá một hệ thống đầy đủ.

DebuggingCapstone
📌 Vì sao module này quan trọng

Kỹ năng debug container thành thạo tiết kiệm hàng giờ mỗi khi có sự cố production. Module cuối này tổng hợp toàn bộ khoá học thành một dự án thực chiến — bổ sung trực tiếp vào portfolio đã xây ở 3 khoá học trước với một khía cạnh hạ tầng mà nhiều AI Engineer khác còn yếu.

🎯 Mục tiêu học tập

  • Debug container hiệu quả bằng logs, exec, inspect
  • Giới hạn tài nguyên (CPU/memory) đúng cách để tránh 1 container làm sập cả máy host
  • Thiết kế healthcheck nâng cao phản ánh đúng tình trạng sẵn sàng thực sự của service
  • Hoàn thành dự án capstone container hoá một hệ thống nhiều service đầy đủ

Bộ công cụ Debug cơ bản

docker logs -f my-container              # xem log real-time
docker logs --since 10m my-container     # log 10 phút gần nhất

docker exec -it my-container /bin/sh     # vào bên trong container đang chạy
docker exec my-container env             # xem biến môi trường thực tế

docker inspect my-container              # toàn bộ metadata: network, mount, state, config
docker inspect -f '{{.State.Health.Status}}' my-container   # trích riêng trạng thái healthcheck

docker stats                             # CPU/memory/network real-time của mọi container đang chạy

docker events                            # theo dõi real-time các sự kiện (start/stop/die/oom...)

Khi container liên tục restart (crash loop), luôn kiểm tra theo thứ tự: docker logs (lỗi ứng dụng gì) → docker inspect phần State (exit code là gì, có bị OOM-killed không) → docker events (có pattern lặp lại đáng ngờ không).

Resource Limits — tránh 1 Container làm sập cả Host

docker run -d \
    --memory=512m --memory-swap=512m \
    --cpus=1.5 \
    my-app
# Trong docker-compose.yml
services:
  api:
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: "1.5"

Không đặt giới hạn tài nguyên là rủi ro vận hành nghiêm trọng: một memory leak trong 1 container có thể ngốn hết RAM của toàn bộ máy host, làm crash cả những container/service khác không liên quan. Luôn đặt giới hạn hợp lý dựa trên đo lường thực tế (dùng docker stats quan sát mức dùng bình thường trước khi quyết định ngưỡng).

Healthcheck nâng cao — phản ánh đúng "sẵn sàng thực sự"

Healthcheck tối thiểu (kiểm tra process còn sống) không đủ — nên kiểm tra service thực sự sẵn sàng phục vụ request (đã kết nối được database, đã load xong model...):

# Dockerfile
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \
    CMD curl -f http://localhost:8000/health || exit 1
# Endpoint /health trong FastAPI — kiểm tra thật sự, không chỉ trả 200 cố định
@app.get("/health")
async def health():
    if not db_pool.is_connected():
        raise HTTPException(status_code=503, detail="database not ready")
    if model is None:
        raise HTTPException(status_code=503, detail="model not loaded")
    return {"status": "ok"}

start_period quan trọng cho service có cold start lâu (model serving — Module 7): trong khoảng thời gian này, healthcheck fail không tính vào số lần retries khiến container bị đánh dấu unhealthy oan lúc đang khởi động bình thường.

Dự án Capstone: Container hoá một hệ thống đầy đủ

Ghép toàn bộ 11 module trước thành 1 dự án thực chiến — container hoá một hệ thống nhiều tầng đại diện cho một sản phẩm AI ứng dụng thật:

  1. nginx (reverse proxy) → Laravel API (Module 6) xử lý nghiệp vụ chính, gọi sang
  2. FastAPI AI service (Module 7) xử lý RAG/Agent (từ khoá AI Engineer), có thể có model serving GPU riêng
  3. PostgreSQL + pgvector với volume bền vững (Module 3)
  4. Redis cho cache/session
  5. Toàn bộ định nghĩa qua Docker Compose (Module 5) với healthcheck đầy đủ (module này), network topology hợp lý (Module 4)
  6. Image được tối ưu và hardening (Module 8), build/test/scan/push qua CI/CD (Module 9, 10)
  7. README mô tả kiến trúc, kèm ghi chú về hướng mở rộng lên Kubernetes (Module 11 — tham chiếu Module 13 khoá AI Engineer)

🏋️ Bài tập thực hành

Hoàn thiện & công bố dự án Capstone

Hoàn thành hệ thống mô tả ở trên, đẩy lên GitHub với README chuẩn công nghiệp (kiến trúc, cách chạy local trong dưới 5 phút bằng docker compose up, các quyết định thiết kế đã cân nhắc). Chạy thử toàn bộ stack, cố tình gây lỗi ở 1 service (ví dụ dừng database) để quan sát healthcheck/log phản ánh đúng vấn đề, và ghi lại quy trình debug bạn đã dùng để xác định nguyên nhân.

📚 Tài nguyên học tập

✅ Tự đánh giá hoàn thành

  • Debug thành công 1 container lỗi bằng logs/exec/inspect theo đúng quy trình
  • Đặt giới hạn tài nguyên hợp lý dựa trên số liệu đo thực tế, không đoán mò
  • Thiết kế healthcheck phản ánh đúng tình trạng sẵn sàng thực sự của service
  • Hoàn thành dự án capstone container hoá hệ thống nhiều service, có README chuẩn công nghiệp