BlackDrag0n
Moderator
- Joined
- Jan 4, 2021
- Messages
- 21
- Reaction score
- 15
- Points
- 3
Công nghệ ảo hoá Containers là gì?
Công nghệ Containers được tạo ra để khác phục trường hợp khi một đoạn chương trình hoặc phần mềm chạy ổn định trên máy của lập tình viên nhưng lại không thể chạy trên Server vì thiếu các thư viện cũng như môi trường. Vì thế Containers được sinh ra để chứa toàn bộ các thành phần, môi trường để chạy phần mềm một cách nhẹ nhất, độc lập và có thể để ứng dụng chạy nhanh chóng và đáng tin cậy từ môi trường máy này sang môi trường máy khác.
Containers sẽ được khởi tạo từ các Containers images, bạn có thể tưởng tượng đây sẽ là OS nền bao gồm các môi trường được lược bỏ các thành phần không cần thiết để cài đặt các phần mềm. Ví dụ bạn muốn triển khai một Web Service có thể sử dụng Images Apache hoặc Nginx để chạy. Một images của Service Apache chỉ vỏn vẹn trong vòng 15MB để có thể chạy được một Web Service.
Sự khác biệt giữa Hypervisor và Container
Có ba công nghệ ảo hoá chính thường hay gặp gồm:
Loại 1: Sẽ thường được gặp nhất. Khi một Lightweight OS ( Hypervisor) được cài đặt trên một Server vật lý. Server vật lý này sẽ có tên gọi là Bare metal. Loại 1 thường được gọi là Bare metal hypervisors. Ví dụ điển hình nhất là các giải pháp ảo hoá như VMware's ESXI, KVM ( Kernel-based Virtual Machine - Linux), và Microsoft's HyperV.
Khi cài đặt Bare metal Hypervisors, bạn có thể cài đặt các VM chứa các OS khác nhau trên cùng một phần cứng.
Loại 2: Hypervisors hay còn được gọi là hosted hypervisors. Có thể biết đến một vài ví dụ như Oracle's Virtualbox hoặc VMware Workstation. Các công nghệ ảo hoá này được cài đặt trên hệ điều hành chính như Windows nhằm mục đích khi bạn muốn cài Kali Linux hoặc Ubuntu trên Laptop của bạn nhưng không muốn gỡ Windows ra hoặc Dual Boot. Khi đó hosted hypervisor cho phép bạn cài đặt một hệ điều hành độc lập trên hệ điều hành Windows của bạn.
Chung quy thì loại 1 và 2 sẽ có những đặc điểm giống nhau. Vậy đối với loại 1 và 2 thì chúng có những lợi ích như:
- Sử dụng phần cứng một cách hiệu quả hơn.
- Dễ dàng quản lý và phân phối các VM.
- Có thể Backup và Restore một cách dễ dàng.
Còn loại 3 sẽ là nhân vật chính hôm nay - Container. Như hình trên thì Container sẽ cần một OS được cài đặt trên Bare metal, OS đó sẽ chứa Container Engine để có thể khởi chạy các Container để chứa các App trên đó.
Các đặc điểm của Container gồm:
- Lightweight: Các container chỉ sử dụng các thư viện cũng như môi trường cần thiết. Vì vậy việc khởi tạo 1 Container sẽ nhanh hơn việc khởi tạo một VM chỉ từ 5-10s.
- Portable: Bạn có thể chạy Container đó trên mọi nơi mà không cần quan tâm đến môi trường Server đã được cài đặt như thế nào. Chỉ cần biết Server đó có cài đặt Container Engine để chạy Container.
- Microservice: microservice là một khái niệm để mô tả các service nhỏ giao tiếp với nhau để tạo thành một ứng dụng hoặc service lớn.
- Bằng cách tách từng microservices, việc kiểm tra các dịch vụ nhỏ trở nên dễ dàng hơn, giảm các điểm lỗi đơn lẻ và tăng tốc độ phát triển.
Vì những đặc điểm của các công nghệ ảo hoá nên tuỳ vào mục đích sử dụng, chúng ta sẽ sử dụng các công nghệ ảo hoá cho phù hợp. Một số trường hợp sử dụng Virtual Machine như:
Duy trì tính nhất quán và khả năng tương thích trong các môi trường hiện có: Nói một cách đơn giản, ngày nay nhiều môi trường không sử dụng container hóa. Máy chủ chạy dưới dạng máy ảo và có thể không có lý do thuyết phục nào để loại bỏ điều đó. Trong những môi trường đó, việc đẩy mạnh chuyển đổi sang công nghệ hóa container có thể chưa có ý nghĩa kinh doanh.
Chạy nhiều ứng dụng cùng nhau:Đôi khi, bạn chỉ cần một máy chủ hoặc máy tính để chạy nhiều ứng dụng. Virtual Machine đáp ứng nhu cầu này một cách độc đáo.
Đảm bảo sự cô lập logic hoàn toàn: Các Container được cài đặt trên một hệ điều hành máy chủ nhất định đều dùng chung Kernel đó. Từ góc độ bảo mật, chúng không bị cô lập về mặt logic như VM. Nếu việc cách ly là quan trọng và bạn đang chọn giữa máy ảo và vùng chứa, thì máy ảo có thể là lựa chọn phù hợp.
Các trường hợp sử dụng Containers:
Microservice và DevOps: Containers là cốt lõi của DevOps và microservices. Nếu bạn đang ở trong một môi trường áp dụng các phương pháp DevOps, Containers thường có thể hữu ích. Điều này là do chúng có tính portable và nhanh chóng.
Ứng dụng web: Nhiều ứng dụng web đang chuyển sang cách tiếp cận microservices. Nếu bạn đang xây dựng các ứng dụng web, việc chuyển sang kiến trúc microservices sử dụng các Container có rất nhiều lợi ích.
Môi trường mà tốc độ là điều bắt buộc Nói chung, bộ chứa khởi động nhanh hơn đáng kể so với máy ảo. Điều này cho phép kiểm tra và khôi phục nhanh hơn khi cần khởi động lại. Nếu tất cả những thứ khác đều bằng nhau và bạn cần thứ gì đó nhanh và nhẹ, hãy sử dụng Container.
Một số thuật ngữ Container
- Docker: là công nghệ đầu tiên được biết đến khi tiếp cận đến Container. Docker là một trong những Container Engine được sử dụng phổ biến nhất. Docker hublà nơi chứa các container images để người dùng có thể sử dụng. Trong Docker sẽ có một số khái niệm như Dockerfile, Docker-compose.
- Dockerfile: là file sẽ mô tả các bước xây dựng một container images. Xác định Images gốc sẽ sử dụng, quy định port Expose, môi trường sẽ được truyền vào,... tất cả sẽ được định nghĩa trong Dockerfile.
- Docker-compose: là một công cụ để định nghĩa và chạy nhiều container của Docker cùng một lúc. Tất cả sẽ được định nghĩa trong file docker-compose và được định dạng theo kiểu dữ liệu YAML (YAML Ain't Markup Language) a.k.a yml.
- Kubernetes( k8s hoặc kube) : là một công nghệ điều phối, tự động hoá hệ thống Container được Google phát triển. Kubernetes có thể thực hiện việc kiểm tra sức khoẻ các Pod ( Container) và thực hiện thay thế các Pod nếu cần thiết một cách tự động. Tuy nhiên hiện nay K8s không còn sử dụng Docker làm Container Engine nữa mà mặc định sử dụng Containerd để làm Container Engine chính từ bản 1.22
Last edited: