Docker không chạy một hypervisor. Nó dựa trên hai nhóm tính năng của Linux kernel:
- Namespaces — cô lập góc nhìn của process. Mỗi container có namespace riêng cho
pid(danh sách process),net(interface, IP, port),mnt(filesystem),uts(hostname),ipcvàuser. Nhờ đó process trong container thấy như đang chạy một mình, không thấy process hay mạng của container khác. - cgroups (control groups) — giới hạn và tính toán tài nguyên mỗi container được dùng: CPU, memory, block I/O, số process. Đây là cơ chế đứng sau
--memory,--cpus.
Gói lại: namespaces quyết định container thấy gì, cgroups quyết định container dùng được bao nhiêu. Kết hợp thêm capabilities và seccomp để giảm quyền. Vì tất cả dùng chung kernel host, một lỗ hổng kernel có thể phá vỡ ranh giới này, nên container cô lập yếu hơn VM.