Ngày nay, hạ tầng máy tính đã thay đổi rất nhiều. Ta không còn nhìn thấy những phòng máy chủ ngập tràn server, mỗi server dùng cho một vài dịch vụ của riêng nó. Thay vào đó là các khối server vật lý lớn chứa đựng những server nhỏ hơn bên trong như các module mà ta vẫn hay gọi là Blade server. Một khối logic là một cụm server vật lý được nhóm họp lại với nhau thành một khối tổng thể với đầy đủ sức mạnh của các máy vật lý thành viên. Và cuối cùng là mỗi một server vật lý lại được chia ra thành những server nhỏ hơn. Đó chính là các máy ảo – virtual machine (VM), đơn vị cơ bản của ảo hóa.
Bản chất của ảo hóa là khả năng tạo ra các chương trình mô phỏng hoạt động thực của một chiếc máy tính -> máy ảo. Các máy ảo này chạy trên các phần cứng ảo là CPU, RAM, đĩa cứng, card mạng……được lấy từ máy chủ vật lý. Trước đây, khi nâng cấp một máy chủ, tính tương thích phần cứng là vô cùng quan trọng, nào là RAM phải giống nhau, ổ cứng phải cùng loại…. Trong khi nếu năng lực một máy chủ mà không dùng hết thì cũng chả có cách nào để tận dụng. Điều này đã làm cho ảo hóa nhanh chóng ra đời và lớn mạnh.
Trong ảo hóa, một phần mềm gọi là hypervisor được cài trên máy tính vật lý với nhiệm vụ tổ chức, sắp xếp một cách linh hoạt các nguồn tài nguyên vật lý cho các máy ảo khác nhau dưới quyền điều khiển của nó. Nó còn được gọi là “virtual machine manager”, một chương trình cho phép nhiều hệ điều hành khác nhau cùng chia sẻ phần cứng vật lý chung. Ta sẽ tìm hiểu 2 kỹ thuật ảo hóa khác nhau đó là : full virtualization and paravirtualization.
Full virtualization là kỹ thuật ảo hóa mô phỏng hoàn toàn phần cứng ảo mà không tương tác với phần cứng vật lý. Kỹ thuật này có thể mô phỏng bất kỳ loại phần cứng vật lý nào theo yêu cầu, nói cách khác full virtualization là khả năng ảo hóa để cho phép chạy các máy ảo mà không cần biết về môi trường chạy trên đó.
Như hình trên cho thấy, trong full virtualization, platform bên dưới chạy các guest OS mà không bị thay đổi hay biết được rằng nó đang chạy trên nền ảo hóa. Có một loại ảo hóa của full virtualization gọi là ảo hóa hỗ trợ phần cứng – hardware-assisted virtualization. Ở loại này, kiến trức CPU giúp thực hiện ảo hóa phần cứng thông qua các tập lệnh đặc biệt cho phép máy ảo thực thi các lệnh trực tiếp trên CPU. Trong Centos 7, hardware-assisted virtualization sẽ được hiện thực bằng cách sử dụng Xen hoặc KVM.
Đây là loại mới của kỹ thuật ảo hóa. Nó có khả năng cho các hệ điều hành cài trên máy ảo – guest OS biên dịch lại – hay còn gọi là recompile. Với kỹ thuật này, ta sẽ có được sự tối ưu trong việc sử dụng tài nguyên. Khác với full virtualization ở đó tài nguyên ảo được tạo và dành riêng cho các máy ảo bất kể nó sử dụng hay không, còn trong paravirtualization, guest OS được quản lý bới hypervisor, một lớp nằm giữa máy chủ ảo và máy chủ vật lý cho phép chia sẻ linh hoạt các tài nguyên trên máy chủ vật lý và hơn thế nữa do không phải giả lập thiết bị nên paravirtualization có tốc độ thực hiện gần như tức thì như so với máy chủ vật lý.
Paravirtualization là một kỹ thuật mở rộng được phát minh bới IBM. Xem là một phần mềm ảo hóa sử dụng kỹ thuật này. Ngày nay, hầu hết các phần mềm ảo hóa đều hỗ trợ paravirtualization và gần như tất cả đều có một interface giữa hypervisor và guest OS kernel.
Các bài viết về ảo hóa với Xen, KVM, OpenVZ 1Hosting đã mô tả khá đầy đủ, vì thế hôm nay ta sẽ đi vào một khái niệm mới về ảo hóa, đó chính là Docker.
Docker sử dụng cùng kỹ thuật “container” với OpenVZ, là một phương pháp khác cho ảo hóa phần mềm dựa trên container. Docker nổi tiếng vì khả năng tự động triển khai ứng dụng của nó. Các template hay các container gồm loại do cộng đồng container phát triển và loại do cộng đồng Docker phát triển. Nói cách khác, Docker là một công cụ có thể đóng gói ứng dụng và các thành phần của nó trong một container chạy trên nền Linux Server. Điều này cho phép các ứng dụng có thể chạy một cách cơ động và uyển chuyển bất kể nó nằm trên nền tảng nào.
Ta có thể so sánh Docker với các máy ảo thông qua hình sau:
Nhìn hình trên ta có thể thấy ngay điểm khác biệt chính là container sử dụng chung kernel với Host OS nên xử lý rất nhẹ nhàng, nhanh chóng, tất nhiên do hạn chế về kernel nên khi một ứng dụng cần upgrade kernel, ta cần phải upgrade kernel của cả máy chủ Host.
Ta sẽ cài đặt Docker như sau:
yum update
curl -sSL https://get.docker.com/ | sh
Tạo user cho Group Docker
usermod -aG docker admin
Khởi động Docker daemon
systemctl docker start
systemctl enable docker.service
Kiểm tra xem Docker đã hoạt động hay chưa
docker run hello-world
Để cài đặt Docker container, ta làm như ví dụ sau
docker pull ubuntu
Sau khi cài đặt xong, chạy Docker container như sau:
docker run -i -t ubuntu /bin/bash
Lúc này là ta đã có Ubuntu hoạt động trong nền Centos 7
Hãy thử gõ lệnh
apt-get update
Và kìa, Lệnh chạy và Ubuntu đã sẵn sàng hoạt động độc lập với Centos 7. Chú ý đừng để đóng shell đang dành cho ubuntu, nếu cần hãy bấm Ctrl-p và Ctrl-q cùng lúc để ra khỏi Docker container mà không làm mất shell terminal.
Qua ví dụ trên có thể thấy, Docker là một trường triển khai nhanh ứng dụng, thường là cho các nhà phát triển phần mềm, tất nhiên là chỉ trong phạm vi của nó. Nếu cần setup thêm các thành phần khác, Docker có thể sẽ trở nên khó để biên dịch, lúc này máy ảo với OS riêng sẽ là giải pháp nhanh chóng để thay thế mà không phải suy nghĩ nhiều!