So sánh giữa VPS và Container.

VPS là dạng máy chủ ảo được tạo ra bằng phương pháp phân chia một máy chủ vật lý thành nhiều máy chủ khác nhau và chạy dưới dạng chia sẻ tài nguyên từ máy chủ vật lý ban đầu đó.

Linux Container hay Container là công nghệ cho phép đóng gói ứng dụng cùng toàn bộ môi trường chạy ứng dụng đó vào trong một Image. Giúp dễ dàng sử dụng và cài đặt lại ở các môi trường khác (dev, test, production) mà tất cả chức năng trong ứng dụng không hề thay đổi.

Hình 1:  So sánh giữ VPS và Container

Trong mô hình ảo hoá thông thường, máy chủ vật lý sẽ phải duy trì một tầng ảo hóa Hypervisor (VMWare, Virtualbox, …) sau đó hypervisor sẽ tạo ra môi trường cô lập để cài đặt các máy ảo. Mỗi máy ảo chạy một hệ điều hành riêng biệt với nhau rồi cuối cùng ứng dụng mới được triển khai trên hệ điều hành của máy ảo đó. Việc này làm tốn rất nhiều tài nguyên của máy chủ vật lý vì phải chạy rất nhiều tầng mới đến ứng dụng.

Mỗi máy ảo chứa ứng dụng, kèm theo các thư viện và hệ điều hành, mỗi ứng dụng như vậy chiếm hàng chục GBs.

Với container, máy chủ vật lý và các container sẽ sử dụng chung duy nhất một linux kernel và đó chính là linux kernel của máy chủ vật lý. Do đó không cần hypervisor, không cần OS cho VPS, ứng dụng chỉ cần một base image là có thể chạy được bình thường.

Mỗi container chạy ứng dụng sẽ chứa các thư viện riêng, nhưng kernel lại được chia sẻ với các container khác.

Tại sao container lại cần thiết?

Trong DevOps, container giúp loại bỏ sự thiếu đồng bộ và nhất quán giữa Developer – người phát triển ứng dụng và Operator – người vận hành.

Developer chỉ cần tập trung vào việc phát triển ứng dụng và viết sẵn một số script để triển khai ứng dụng trong container rồi gửi cho Operator source code đó. Việc còn lại của Operator chỉ đơn giản là build thành image và run image vừa mới build.

Tóm lại chạy container có rất nhiều ưu điểm:

Linh động: Triển khai ở bất kỳ nơi đâu do sự phụ thuộc của ứng dụng vào tầng OS cũng như cơ sở hạ tầng được loại bỏ.

Nhanh: Do chia sẻ host OS nên container có thể được tạo gần như một cách tức thì.

Nhẹ: Container cũng sử dụng chung các images nên cũng không tốn nhiều disks.

Đồng nhất: Khi nhiều người cùng phát triển trong cùng một dự án sẽ không bị sự sai khác về mặt môi trường.

Đóng gói: Có thể ẩn môi trường bao gồm cả app vào trong một gói được gọi là container. Có thể test được các container. Việc bỏ hay tạo lại container rất dễ dàng.

Tuy vậy dùng container không phải không có nhược điểm

Do dùng chung OS nên nếu có lỗ hổng nào đấy ở kernel của host OS thì nó sẽ ảnh hưởng tới toàn bộ container có trong host OS đấy.

Ngoài ra nếu trong trường hợp ai đấy hoặc một ứng dụng nào đấy có trong container chiếm được quyền superuser thì tầng OS sẽ bị chiếm quyền và ảnh hưởng trực tiếp đến máy đó cũng như các container khác trong máy đó.

Kết luận

Như vậy container rất quan trọng đối với DevOps. Hiện tại có rất nhiều container runtime khác nhau như: Rkt, Docker, … Trong bài sau chúng ta sẽ đi tìm hiểu chi tiết về Docker.