FresherKỹ thuậtDocker
Container khác máy ảo (virtual machine) như thế nào?
Thử trả lời trước
Đáp án mẫu
Máy ảo giả lập phần cứng thông qua hypervisor và chạy một hệ điều hành guest hoàn chỉnh với kernel riêng. Container là một process bình thường trên host được Linux cô lập, và nó dùng chung kernel của host.
Việc cô lập trong container đến từ hai tính năng của kernel:
- Namespace cho process một góc nhìn riêng về process id, mạng, mount, hostname và user.
- cgroup giới hạn và theo dõi CPU, memory và I/O.
Hệ quả:
- Container khởi động trong mili giây đến vài giây và có kích thước megabyte, trong khi VM phải boot một OS và nặng cỡ gigabyte.
- Một host chạy được nhiều container hơn nhiều so với VM.
- Ranh giới cô lập yếu hơn, vì lỗi kernel có thể ảnh hưởng mọi container trên host. VM cô lập mạnh hơn, nên các nền tảng multi-tenant thường đặt container bên trong VM, hoặc dùng sandbox như gVisor hay Kata Containers.
- Container Linux cần kernel Linux. Trên macOS và Windows, Docker Desktop chạy một VM Linux nhẹ để chứa chúng.
Container đóng gói một ứng dụng, còn VM đóng gói cả một cỗ máy.
Ý chính
- Container dùng chung kernel của host, VM chạy kernel riêng
- Namespace cô lập góc nhìn và cgroup giới hạn tài nguyên
- Container nhẹ hơn và khởi động nhanh hơn
- Cô lập của container yếu hơn của VM
Câu hỏi nối tiếp thường gặp
- Vì sao container Linux không chạy native trên host macOS được?
Lỗi thường gặp
- Nói container là VM nhẹ có kernel riêng
- Coi cô lập của container ngang với VM