Part 11 · Docker · 11.4

Sai lầm và checklist Docker

Image chạy được chưa đủ: phải repeatable, least-privilege, observable và shutdown/recover đúng. Trang này dùng để tự kiểm tra các lỗi tư duy và tiêu chí hoàn thành trước khi coi phần Docker là đã nắm chắc.

Red flags

1. Gọi container là “VM nhẹ”. Container dùng isolation của kernel nhưng vẫn chia sẻ host kernel; nếu không hiểu boundary này, rất dễ đánh giá sai security, resource isolation và failure blast radius.
2. Mutable latest, COPY toàn repo sớm, secret trong ARG/ENV/layer. Kết quả build khó reproducible, cache bị phá rộng, và secret có thể tồn tại trong image history/layer dù file cuối đã bị xóa.
3. Root/privileged, mount Docker socket, chmod 777. Đây là dấu hiệu đang bỏ qua least privilege; compromise trong container có thể mở rộng thành compromise host hoặc control plane Docker.
4. State hoặc log quan trọng nằm trong writable layer. Container recreate có thể làm mất dữ liệu; disk pressure cũng khó kiểm soát. Data lifecycle phải được gắn rõ với volume/bind/tmpfs và log pipeline.
5. Shell làm PID 1, không SIGTERM/drain, rồi tăng stop timeout để che lỗi. Failure window lúc deploy/restart sẽ kéo dài, request có thể bị cắt ngang và child process có thể thành zombie nếu signal/reaping không được xử lý đúng.
6. Copy-paste Nginx config mà không hiểu location, buffering và proxy headers. Hệ quả thường xuất hiện ở timeout, upload/download lớn, client IP, WebSocket/SSE hoặc cache behavior chứ không nhất thiết ở happy path.

Checklist

Production drill: Khi có deploy/restart hoặc host pressure, tôi xác định được failure window: traffic bắt đầu fail lúc nào, bao lâu service drain/stop, container restart mất bao lâu, health check khi nào chuyển trạng thái, backlog/error rate có tăng không và cần rollback/recovery tại ngưỡng nào.
Security check: Không mount Docker socket nếu không thật sự cần; tránh privileged; chỉ cấp capability cần thiết; không đưa secret vào image/command history; xác minh file permission và network exposure theo threat model của service.

Definition of Done

Tự đánh giá cuối: Tôi không chỉ làm container “chạy được”, mà còn có thể giải thích isolation, data lifecycle, signal/restart behavior, operational signals, security boundary và cách rollback/recover khi failure xảy ra.