Một Virtual Machine (VM) là khá một thuật ngữ chung cho nhiều công nghệ ảo hóa.
Có rất nhiều biến thể về công nghệ ảo hóa, nhưng những biến thể chính là:
- Ảo hóa cấp độ phần cứng
- Ảo hóa cấp độ hệ điều hành
qemu-kvm
và VMWare
là những ví dụ đầu tiên. Họ sử dụng một trình ảo hóa để quản lý các môi trường ảo trong đó một hệ điều hành đầy đủ chạy. Ví dụ: trên một qemu-kvm
hệ thống, bạn có thể có một VM chạy FreeBSD, một máy chạy Windows khác và một máy chạy Linux khác.
Các máy ảo được tạo ra bởi các công nghệ này hoạt động giống như các máy tính riêng lẻ cho khách. Chúng có CPU ảo, RAM, NIC, đồ họa, vv mà khách tin là bài viết chính hãng. Do đó, nhiều hệ điều hành khác nhau có thể được cài đặt trên máy ảo và chúng hoạt động "ngoài luồng" mà không cần sửa đổi.
Mặc dù điều này rất thuận tiện, trong đó nhiều hệ điều hành sẽ cài đặt mà không tốn nhiều công sức, nhưng có một nhược điểm là bộ ảo hóa phải mô phỏng tất cả phần cứng, có thể làm mọi thứ chậm lại. Một thay thế là phần cứng ảo hóa para, trong đó một thiết bị và trình điều khiển ảo mới được phát triển cho khách được thiết kế để thực hiện trong môi trường ảo. qemu-kvm
cung cấp một virtio
loạt các thiết bị và trình điều khiển cho việc này. Một nhược điểm của điều này là hệ điều hành khách phải được hỗ trợ; nhưng nếu được hỗ trợ, lợi ích hiệu suất là rất lớn.
lxc
là một ví dụ về Ảo hóa cấp hệ điều hành, hoặc các thùng chứa. Trong hệ thống này, chỉ có một kernel được cài đặt - kernel host. Mỗi container chỉ đơn giản là một sự cô lập của các quy trình người dùng. Ví dụ: một máy chủ web (ví dụ apache
) được cài đặt trong một thùng chứa. Theo như máy chủ web có liên quan, máy chủ được cài đặt duy nhất là chính nó. Một container khác có thể đang chạy một máy chủ FTP. Máy chủ FTP đó không biết về cài đặt máy chủ web - chỉ có nó. Một thùng chứa khác có thể chứa toàn bộ cài đặt vùng người dùng của một bản phân phối Linux (miễn là bản phân phối đó có khả năng chạy với nhân của hệ thống máy chủ).
Tuy nhiên, không có cài đặt hệ điều hành riêng biệt khi sử dụng các thùng chứa - chỉ có các phiên bản riêng biệt của dịch vụ người dùng. Do đó, bạn không thể cài đặt các nền tảng khác nhau trong một thùng chứa - không có Windows trên Linux.
Các container thường được tạo bằng cách sử dụng a chroot
. Điều này tạo ra một root riêng ( /
) cho một quá trình để làm việc với. Bằng cách tạo nhiều gốc riêng, các quy trình (máy chủ web hoặc bản phân phối Linux, v.v.) chạy trong hệ thống tệp riêng biệt của chúng. Các kỹ thuật nâng cao hơn, chẳng hạn như cgroups
có thể cô lập các tài nguyên khác như mạng và RAM.
Có những ưu và nhược điểm đối với cả hai và nhiều cuộc tranh luận kéo dài là tốt nhất.
- Các container nhẹ hơn, trong đó một hệ điều hành đầy đủ không được cài đặt cho mỗi; đó là trường hợp cho các siêu giám sát. Do đó, họ có thể chạy trên phần cứng spec'd thấp hơn. Tuy nhiên, họ chỉ có thể chạy khách Linux (trên máy chủ Linux). Ngoài ra, vì họ chia sẻ kernel, nên có khả năng một container bị xâm nhập có thể ảnh hưởng đến kernel khác.
- Hypervisor an toàn hơn và có thể chạy các HĐH khác nhau vì một HĐH đầy đủ được cài đặt trong mỗi VM và khách không biết về các VM khác. Tuy nhiên, điều này sử dụng nhiều tài nguyên hơn trên máy chủ, phải tương đối mạnh mẽ.