Khái niệm Container

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng kiến trúc triển khai liên tục cho các hệ thống dựa trên vi dịch vụ luận văn ths máy tính 84801 (Trang 27 - 31)

Container là phương pháp ảo hoá ở mức hệ điều hành, cho phép chạy một ứng

dụng cùng các thư viện nó phụ thuộc trong các tiến trình có tài ngun được cách li. Container giúp đóng gói mã, cơng cụ hệ thống, các cấu hình ... của ứng dụng vào trong một khối duy nhất gọi là ảnh container [9].

Cơng nghệ container có trên hầu hết các hệ điều hành, từ Windows, Linux, Mac, do vậy các phần mềm được container hóa ln chạy như nhau trên tất cả các môi

trường. Container giúp đảm bảo ứng dụng có thể được triển khai nhanh chóng, độ tin cậy cao và nhất quán, phù hợp với mơ hình triển khai khơng tùy biến như đã đề cập ở phần trước.

Hình 1.10: Cơng nghệ container

Công nghệ container và công nghệ máy ảo có nhiều điểm tương đồng, ví dụ như về lợi ích liên quan tới phân phối và cách li tài nguyên. Tuy nhiên, container là ảo hoá

ở mức hệ điều hành cịn máy ảo là cơng nghệ ảo hố phần cứng. Container có tính di động cao và sử dụng tài nguyên hiệu quả hơn. Sự khác nhau về mặt kiến trúc của

Hình 1.11: Khác biệt giữa container và máy ảo

Container là một lớp trừu tượng nằm ở tầng ứng dụng, đóng gói mã và các lệ

thuộc vào cùng nhau. Nhiều container có thể được chạy trên cùng một máy và chia sẻ nhân hệ điều hành với các container khác. Mỗi container sẽ chạy như những tiến trình

được cách li trong user space (Trong Linux, để đảm bảo tính cách li, container thường

sử dụng namespace và control group). Các container có kích thước nhẹ hơn, chiếm ít khơng gian bộ nhớ hơn các máy ảo, do vậy có khả năng khởi động gần như ngay tức

thời.

Máy ảo là một lớp trừu tượng của phần cứng vật lý, có khả năng biến một máy chủ thành nhiều máy chủ con. Tầng hypervisor cho phép nhiều máy ảo chạy trong

cùng một máy thật. Mỗi một máy ảo gồm đầy đủ hệ điều hành, các ứng dụng đi kèm, các thư viện cơ bản, do vậy thường chiếm tới hàng chục GB bộ nhớ. Các máy ảo

thường mất nhiều thời gian để khởi động.

Công nghệ container đã xuất hiện từ lâu, tuy nhiên nó ít khi được sử dụng do sự phức tạp trong quá trình tạo ra một container ổn định và việc đảm bảo môi trường thực thi. Tuy nhiên, với sự xuất hiện của docker, container trở nên ngày càng phổ biến. Docker đóng vai trị như một lớp trung gian giúp ẩn đi môi trường chạy phức tạp của

container với người dùng.

Phần lõi của Docker là Docker Engine, một ứng dụng khách-chủ với các thành

phần như sau (Hình 1.12: Kiến trúc Docker) [10]:

• Một tiến trình daemon (chạy thơng qua lệnh dockerd) đóng vai trị là server

• Các RestAPI xác định giao diện mà các chương trình khác dùng để tương tác

với daemon và hướng dẫn nhiệm vụ cần làm

Hình 1.12: Kiến trúc Docker

Docker daemon (dockerd) lắng nghe các yêu cầu docker API và quản lý các đối tượng Docker như ảnh, container, mạng và ổ chứa (volume). Một daemon có thể giao tiếp với các daemon khác để quản lý các dịch vụ docker.

Docker client (docker) là cách cơ bản mà nhiều người dùng sử dụng để tương tác với docker. Khi sử dụng các câu lệnh như docker run, máy trạm gửi những câu lệnh

này tới dockerd, nơi thực sự thực thi nhiệm vụ. Docker client có thể giao tiếp với

nhiều docker daemon.

Docker registry là nơi lưu trữ các ảnh Docker. Các registry nổi tiếng như Docker Hub hay Docker Cloud là các registry công khai mà bất cứ ai cũng có thể sử dụng, và mặc định thì chương trình Docker cũng được cấu hình để tìm kiếm ảnh trong Docker

Hub. Ngoải ra, người dùng cũng có thể tự chạy registry của riêng mình. Khi câu lệnh

docker pull hay docker run được gọi, các ảnh container tương ứng sẽ được tải về từ

registry. Ngược lại, câu lệnh docker push cho phép người dùng đẩy ảnh lên registry đó.

Trong Docker phân biệt hai khái niệm ảnh và container. Ảnh là một bản mẫu với các câu lệnh để hướng dẫn tạo ra Docker container. Một ảnh thường được xây dựng

sau đó cài đặt thêm ứng dụng apache server, chỉnh sửa cấu hình cần thiết và đóng gói

lại thành một ảnh mới. Để tạo ảnh thì Docker sử dụng Dockerfile với cú pháp riêng.

Container là một thực thể chạy của ảnh. Người dùng có thể tạo, khởi động, dừng hay xóa container sử dụng Docker API hoặc CLI. Container có thể kết nối tới một hoặc nhiều mạng khác nhau và gắn bộ lưu trữ vào. Mặc định thì container sẽ chạy cách li với các container khác cũng như máy đang chạy.

Hình 1.13: Kiến trúc chi tiết của Docker

Cơng nghệ được sử dụng phía dưới Docker bao gồm: namespace (giúp cách li tài nguyên sử dụng) và control group (giới hạn tài nguyên sử dụng) và Union File System (UnionFS, giúp tạo ra các lớp ảnh trong một ảnh docker hoàn chỉnh). Ảnh docker được

CHƯƠNG 2: YÊU CẦU CỦA HỆ THỐNG TRIỂN KHAI LIÊN TỤC

Có hai cách tiếp cận cơ bản đối với cơ sở hạ tầng dùng để triển khai dịch vụ:

cách thức sử dụng các máy một cách riêng rẽ và cách thức xem các máy như nhau, chỉ quan tâm tới số lượng máy (pet approach và cattle approach to infrastructure [11]).

Trong cách tiếp cận sử dụng các máy một cách riêng rẽ, mỗi máy được đặt tên

riêng và các ứng dụng được phân bố tĩnh tới các máy. Ví dụ: Sử dụng máy tên db-prod

để cài cơ sở dữ liệu. Các ứng dụng được triển khai thủ công trên các máy. Nếu máy

triển khai có vấn đề, người sử dụng phải tự động sửa chữa hoặc chuyển toàn bộ ứng dụng sang máy khác. Cách tiếp cận này được sử dụng rộng rãi trước thời kỳ tính tốn đám mây.

Với cách tiếp cận các máy được xem như giống hệt nhau và được đối xử như

nhau, người dùng chỉ quan tâm tới số lượng máy sử dụng hơn là tên từng máy riêng lẻ, các ứng dụng được triển khai tự động trên bất kỳ máy nào. Khi một máy gặp vấn đề,

người vận hành khơng cần sửa máy ngay lập tức mà sẽ có cơ chế để chuyển đổi ứng dụng từ máy đó sang các máy cịn lại. Người vận hành sẽ thay thế máy tại thời điểm thích hợp chứ khơng phải ngay tại thời điểm máy hư.

Cách tiếp cận thứ hai thường được dùng cho các hệ thống dựa trên vi dịch vụ sử dụng container. Tuy nhiên, cách tiếp cận này đòi hỏi người triển khai phải lựa chọn cách thức cung ứng máy, làm thế nào để thiết lập kênh giao tiếp giữa các container với nhau cũng như với mơi trường bên ngồi, làm thế nào để đảm bảo container được triển khai và có thể được tìm thấy trong một cluster các máy.

Để đảm bảo khả năng triển khai nhanh, một thiết kế triển khai liên tục cần phải

thỏa mãn được yêu cầu nêu trên, cũng như các yêu cầu đa dạng khác để đảm bảo tính tiện dụng cho các bên liên quan. Chương này sẽ giới thiệu, phân tích những yêu cầu quan trọng nhất cho một hệ thống như vậy.

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng kiến trúc triển khai liên tục cho các hệ thống dựa trên vi dịch vụ luận văn ths máy tính 84801 (Trang 27 - 31)

Tải bản đầy đủ (PDF)

(83 trang)