DevOps 22/09/2026 5 phút

Container không phải máy ảo: nó chỉ là một tiến trình bị cô lập

"Container là VM nhẹ" là hiểu lầm phổ biến nhất về Docker. Thực ra container là một tiến trình thường trên host, được cô lập bằng namespace và giới hạn bằng cgroup — dùng chung kernel host. Bài này chạy thật: alpine và ubuntu cùng thấy một kernel, tự tạo cô lập bằng unshare không cần docker (shell thành PID 1), và đo khởi động 164ms.

DevOps 22/09/2026 6 phút

PID namespace: ứng dụng trong container là PID 1 — và vì sao điều đó khiến docker stop chậm

Trong container, ứng dụng của bạn chạy với PID 1 như init của cả một hệ. Kernel bảo vệ PID 1: nó BỎ QUA các tín hiệu không có handler — nên app không xử lý SIGTERM sẽ phớt lờ docker stop. Bài này chạy thật: PID 1 sống sót sau SIGTERM, docker stop mất 3.1s (chờ grace rồi SIGKILL), và --init (tini) kéo xuống 0.1s.

DevOps 22/09/2026 5 phút

Mount namespace: vì sao mỗi container có cây thư mục gốc / của riêng nó

Container dùng chung kernel host nhưng thấy một hệ thống file hoàn toàn riêng — / của nó khác / của host. Bài này chạy thật ba tầng cơ chế: alpine thấy rootfs riêng không có thư mục của host, mount namespace cô lập bảng mount (tmpfs chỉ ns đó thấy), và chroot tự dựng đổi / thành một rootfs tối giản. Nền tảng của filesystem container.

DevOps 22/09/2026 5 phút

Network namespace: vì sao mỗi container có địa chỉ IP của riêng nó

Container có eth0, IP, bảng định tuyến và cổng của riêng nó — hai container đều mở cổng 80 mà không đụng nhau. Bài này chạy thật: container thấy eth0 172.17.0.5, network namespace mới chỉ có loopback (bị cắt mạng), và tự dựng cặp veth nối hai namespace với ping 0% loss — chính là cách Docker nối container vào bridge của host.