- Máy ảo (VM): ảo hóa phần cứng qua hypervisor; mỗi VM chạy hệ điều hành khách đầy đủ riêng. Cô lập mạnh, nhưng nặng (hàng GB, khởi động chậm hàng chục giây).
- Container: ảo hóa ở tầng hệ điều hành; các container dùng chung kernel của host nhưng chạy trong không gian tiến trình/tệp cô lập. Nhẹ (hàng MB), khởi động trong mili-giây, chạy được nhiều container hơn trên cùng phần cứng.
Docker đóng gói ứng dụng cùng toàn bộ phụ thuộc (thư viện, runtime, config) vào một image bất biến; image chạy giống nhau ở mọi nơi hỗ trợ container. Điều này giải quyết vấn đề kinh điển "chạy được trên máy tôi mà" — môi trường dev/test/prod đồng nhất.
Đánh đổi: container cô lập yếu hơn VM vì chung kernel — cần cân nhắc với workload nhạy cảm về bảo mật/đa khách hàng.