CHƯƠNG 02 · Linux bên trong Container•BÀI 07 / 80

Container PID 1 và tín hiệu dừng

Tại sao shutdown không graceful làm mất request hoặc hỏng queue.

Nền tảng◷ 4 phút đọc3/4 trong chương

Nắm bản chất

PID 1 trong container nhận signals khi runtime yêu cầu dừng. Nếu ứng dụng dùng shell wrapper không exec, signal có thể không đến tiến trình chính đúng cách. Vì vậy Dockerfile nên chạy ứng dụng dạng exec-form CMD ["program","arg"], hoặc entrypoint script dùng exec "$@".

Một dịch vụ production cần xử lý SIGTERM, ngừng nhận công việc mới, hoàn thành hoặc checkpoint công việc đang chạy và giải phóng tài nguyên trước termination grace period. Healthcheck không thay thế graceful shutdown.

Luồng hoạt động

SIGTERM→graceful shutdown→SIGKILL timeout

Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?

Lệnh & cấu hình mẫu

FROM python:3.13-slim
WORKDIR /app
COPY app.py .
CMD ["python", "app.py"]
docker stop --time 20 my-service
docker inspect my-service --format '{{.State.ExitCode}}'

Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.

Bài tập 10–20 phút

✳

Viết một Python process đăng ký SIGTERM handler và in logs khi thoát. Kiểm tra khác biệt giữa docker stop và docker kill.

Lỗi dễ mắc

!

Một Worker ACK message trước khi ghi kết quả bền vững có thể làm mất công việc khi bị SIGKILL. Thiết kế commit/ACK theo đúng thứ tự.

Tự kiểm tra

Tại sao `exec` trong entrypoint script có ích?Xem đáp án ↗

Nó thay shell bằng ứng dụng làm PID chính, giúp signals và exit status được xử lý trực tiếp hơn.

TÀI NGUYÊN ĐI KÈM

Học thêm qua lab

Bài học nền tảng có thể thực hiện trực tiếp bằng các lệnh trên; bảng tra cứu nhanh giúp ôn tập.

→ Mở bảng lệnh tra cứu nhanh
NGUỒN CHÍNH THỨC

Đối chiếu tài liệu gốc

Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.

Mở tài liệu chính thức ↗