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 đủ.
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:
- nginx (reverse proxy) → Laravel API (Module 6) xử lý nghiệp vụ chính, gọi sang
- FastAPI AI service (Module 7) xử lý RAG/Agent (từ khoá AI Engineer), có thể có model serving GPU riêng
- PostgreSQL + pgvector với volume bền vững (Module 3)
- Redis cho cache/session
- 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)
- Image được tối ưu và hardening (Module 8), build/test/scan/push qua CI/CD (Module 9, 10)
- 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 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
-
Docker — TroubleshootingHướng dẫn chính thức xử lý sự cố Docker daemon/containerDocs
-
Docker — Resource constraintsTài liệu chính thức giới hạn tài nguyên containerDocs
-
Docker — Healthcheck instruction referenceTham chiếu đầy đủ HEALTHCHECK trong DockerfileDocs
✅ 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