I. Ảo hoá nền hệ điều hành là gì?
Ảo hoá nền hệ điều hành (OS-level virtualization) là phương pháp ảo hoá được thực hiện trực tiếp trên nền hệ điều hành được cài đặt trên máy chủ vật lý. Công nghệ này tận dụng tính năng phân chia không gian người dùng (user space) trong nhân của hệ điều hành, tạo ra các hệ điều hành ảo riêng biệt.
Các máy ảo trong công nghệ ảo hoá nền hệ điều hành (OS-level virtualization) thường được gọi là Container hoặc Instance, để phân biệt với tên gọi Virtual Machine trong công nghệ ảo hoá phần cứng Hardware-level virtualization.
1. Ưu điểm
- Linh hoạt: Quản lý, cấp phát và chia sẻ tài nguyên hiệu quả hơn. Tài nguyên được chia sẻ linh hoạt giữa các container, không bị giới hạn tài nguyên “cứng” như virtual machine
- Tiết kiệm tài nguyên hệ thống vì không phải lãng phí tài nguyên (CPU, RAM, Storage) cho Hypvisor và hệ điều hành khách như khi dùng Virtual Machine.
- Hiệu năng: Hoạt động nhanh và mượt hơn vì chạy trực tiếp trên cùng một nhân hệ điều hành. Không phải thông qua thông qua Hypervisor và hệ điều hành khách như hình thức ảo hóa phần cứng.
2. Nhược điểm
- Kém ổn định: Hiệu năng hoạt động của Container không ổn định nếu không quản lý hợp lý. Lý do vi tài nguyên hệ thống được chia sẻ giữa các Container, không được phân chia “cứng” như trên máy ảo Virtual Machine. Nếu 1 container chiếm dụng quá nhiều tài nguyên sẽ ảnh hưởng đến các container khác trong cùng hệ thống.
- Hạn chế lựa chọn: Không thể tạo ra máy ảo container sử dụng hệ điều hành khác với hệ điều hành Host.
II. Các công nghệ ảo hoá hệ điều hành
Các hệ điều hành phổ biến đều đang có những công nghệ ảo hoá OS-level virtualization khác nhau:
- Linux: OpenVZ, LXC, Singularity, Linux-VServer…
- BSD: vkernel, FreeBSD jail,…
- Windows: Sandboxie, Turbo,…
- Solaris: Solaris Containers
- Cross-Platform (đa nền tảng): Docker
Số lượng công nghệ ảo hoá hệ điều hành tuy nhiều nhưng trên thực tế hiện tại chỉ còn 2 công nghệ được sử dụng phổ biến trong ngành điện toán đám mây (cloud computing): LXC và Docker. OpenVZ đã từng được dùng phổ biến cách đây khoảng 8-10 năm nhưng sau đó dần bị thay thế bởi LXC.
Do đó trong bài viết này mình chỉ tập trung giới thiệu về LXC và Docker.
III. LXC là gì?
LXC (LinuX Container) là giải pháp ảo hoá trên nền hệ điều hành cho phép nhiều hệ thống Linux cùng hoạt động trên một máy chủ vật lý, sử dụng chung Linux kernel.
LXC kết hợp hai tính năng đặc biệt của nhân Linux: cgroups (cho phép giới hạn và ưu tiền tài nguyên hệ thống) và namespace (cho phép tạo phân vùng tài nguyên độc lập trên hệ điều hành) để tạo ra các môi trường ảo hoá (VE – Virtual Environment) để triển khai ứng dụng.
LXC là dự án mã nguồn mở, được phát triển từ năm 2008. Hiện tại, nó đang được đóng góp bởi các tập đoàn lớn như Virtuozzo (công ty tạo ra OpenVZ), IBM và Google.
Bên cạnh LXC, chúng ta còn có thêm LXD – công cụ quản lý container và máy ảo được cải tiến từ LXC. LXD được sáng tạo và phát triển bởi Canonical (công ty tạo ra hệ điều hành Ubuntu).
LXC thường được dùng bởi các công ty Cloud Hosting để cung cấp các dịch vụ Hosting cao cấp. Trong đó có hai cái tên nổi tiếng là Kinsta và SiteGround.
IV. Docker là gì?
Docker là cung là một giải pháp ảo hóa nền hệ điều hành để cung cấp phần mềm được đóng gói dưới dạng Container.
Docker được ra mắt vào năm 2013 với hình thức mã nguồn mở tên gọi Docker Engine. Thời điểm đó, Docker sử dụng LXC làm trình điều khiển cho container. Từ phiên bản 0.9, Docker đã thay thế LXC bằng trình điều khiển riêng với tên gọi libcontainer.
Trong khi thế mạnh của LXC là tạo môi trường ảo cho hệ điều hành, thế mạnh của Docker tạo ra môi trường ảo dành cho ứng dụng. Mỗi ứng dụng hoạt động độc lập trong một môi trường ảo (Docker container) tách biệt. Các container giao tiếp với nhau thông qua phần mềm điều khiển Docker Engine được cài trên hệ điều hành của máy chủ vật lý.
Ưu điểm của Docker
- Cơ động: Ứng dụng được đóng gói trong Container giúp triển khai nhanh chóng trên mọi hệ thống, bảo đảm tính đồng nhất từ môi trường Development ra Production.
- Linh hoạt: Docker có thể được triển khai đa nền tảng Linux/Windows/Mac OS, trong khi LXC chỉ có thể triển khai trên Linux.
- Tối ưu tài nguyên: Docker Engine phân bố tài nguyên đến Container trực tiếp từ tài nguyên vật lý của Host, không phải thông qua hệ điều hành khách như khi sử dụng LXC. Do đó bạn có thể vận hành nhiều Docker Container hơn so với số lượng LXC Container trên cùng một máy chủ.
- Nhanh và nhỏ gọn: Bạn không cần phải thiết lập máy ảo mới để triển khai ứng dụng. Mọi thông số cấu hình của ứng dụng được tích hợp sẵn trong Docker container. Bạn có thể khởi động, tạm dừng hay khởi động lại container trong tích tắc.
Docker hiện nay đang được ứng dụng cực kỳ phổ biến trong ngành công nghiệp điện toán đám mây (Cloud Computing) nhờ vào sự hậu thuẫn của các tập đoàn công nghệ lớn: Netflix, Google, Redhat, IBM, Microsoft,…
V. Lựa chọn công nghệ ảo hoá
Nắm được sự khác nhau giữa các công nghệ ảo hoá sẽ giúp bạn lựa chọn dịch vụ phù hợp với nhu cầu sử dụng của mình.
- Nếu bạn đang cần sử dụng máy chủ ảo VPS, hãy chọn lựa các nhà cung cấp máy chủ ảo KVM/Xen để bảo đảm hiệu năng và sự ổn định. Đừng chọn LXC.
- Nếu bạn cần thiết lập nhiều ứng dụng trên cùng một máy chủ ảo/máy chủ vật lý, hãy chọn Docker Container để đơn giản hoá việc cài đặt và cấu hình.
- Nếu bạn cần thiết lập máy ảo Linux trong môi trường Homelab, LXC là lựa chọn tối ưu nhờ kích thước nhỏ gọn và khả năng tối ưu tài nguyên hệ thống.