Get in touch
or send us a question?
CONTACT

[Docker Tutorial] Tìm hiểu thêm về một vài khái niệm 2

1. Virtualization là gì?

Virtualization là kỹ thuật nhập hệ điều hành Khách lên trên hệ điều hành Máy chủ. Kỹ thuật này ban đầu là một phát hiện vì nó cho phép các nhà phát triển chạy nhiều hệ điều hành trong các máy ảo khác nhau, tất cả đều chạy trên cùng một máy chủ. Điều này đã loại bỏ nhu cầu về tài nguyên phần cứng bổ sung. Ưu điểm của Máy ảo (Virtual Machines) hoặc Virtualization là:

  • Nhiều hệ điều hành có thể chạy trên cùng một máy
  • Bảo trì và phục hồi dễ dàng trong trường hợp điều kiện hỏng hóc
  • Tổng chi phí sở hữu cũng ít hơn do nhu cầu cơ sở hạ tầng giảm

Trong sơ đồ dưới, bạn có thể thấy có một hệ điều hành chủ, trên đó có 3 hệ điều hành khách đang chạy, không gì khác ngoài các máy ảo.

Như bạn biết không có gì là hoàn hảo, Virtualization cũng có một số thiếu sót. Chạy nhiều Máy ảo trong cùng một hệ điều hành máy chủ sẽ dẫn đến giảm hiệu suất. Điều này là do hệ điều hành khách chạy trên hệ điều hành chủ, hệ điều hành này sẽ có hạt nhân và tập hợp các thư viện và phụ thuộc của riêng nó. Điều này chiếm một lượng lớn tài nguyên hệ thống, tức là đĩa cứng, bộ xử lý và đặc biệt là RAM.

Một vấn đề khác với Máy ảo sử dụng virtualization là mất gần một phút để khởi động. Điều này rất quan trọng trong trường hợp ứng dụng thời gian thực.

Sau đây là những nhược điểm của Virtualization:

  • Chạy nhiều Máy ảo dẫn đến hiệu suất không ổn định
  • Trình giám sát không hiệu quả như hệ điều hành máy chủ
  • Quá trình khởi động lâu và mất thời gian

Những hạn chế này đã dẫn đến sự xuất hiện của một kỹ thuật mới được gọi là Containerization. Bây giờ để tôi nói cho bạn biết về Containerization.

2. Containerization là gì?

Containerization là kỹ thuật đưa Virtualization lên cấp hệ điều hành. Trong khi Virtualization mang lại sự trừu tượng cho phần cứng, Containerization mang lại sự trừu tượng cho hệ điều hành. Lưu ý rằng Containerization cũng là một loại Virtualization. Tuy nhiên, Containerization hiệu quả hơn vì không có hệ điều hành khách ở đây và sử dụng hệ điều hành của máy chủ lưu trữ, chia sẻ thư viện và tài nguyên liên quan khi cần thiết không giống như máy ảo. Các mã nhị phân và thư viện container dành riêng cho ứng dụng chạy trên hạt nhân máy chủ, giúp xử lý và thực thi rất nhanh. Ngay cả việc khởi động một container cũng chỉ mất một phần nhỏ của giây. Bởi vì tất cả các container chia sẻ, lưu trữ hệ điều hành và chỉ giữ các tệp nhị phân & thư viện liên quan đến ứng dụng. Chúng nhẹ và nhanh hơn Máy ảo.

Ưu điểm của Containerization so với Virtualization:

  • Các container trên cùng một nhân hệ điều hành nhẹ hơn và nhỏ hơn
  • Sử dụng tài nguyên tốt hơn so với máy ảo
  • Quá trình khởi động ngắn và mất vài giây

Trong sơ đồ trên, bạn có thể thấy rằng có một hệ điều hành máy chủ được chia sẻ bởi tất cả các containers. Container chỉ chứa các thư viện ứng dụng cụ thể riêng biệt cho từng container và chúng nhanh hơn và không lãng phí bất kỳ tài nguyên nào.

Tất cả các container này được xử lý bởi containerization layer không có nguồn gốc từ hệ điều hành máy chủ. Do đó, cần phải có một phần mềm, phần mềm này có thể cho phép bạn tạo và chạy các container trên hệ điều hành máy chủ của bạn.

3. Hướng dẫn Docker – Giới thiệu về Docker

Docker là một nền tảng container hóa gói ứng dụng của bạn và tất cả các phần phụ thuộc của nó lại với nhau dưới dạng Container để đảm bảo rằng ứng dụng của bạn hoạt động liền mạch trong mọi môi trường.

Như bạn có thể thấy trong sơ đồ trên, mỗi ứng dụng sẽ chạy trên một container riêng biệt và sẽ có tập hợp các thư viện và phụ thuộc riêng. Điều này cũng đảm bảo rằng có sự cô lập ở cấp độ quy trình, nghĩa là mỗi ứng dụng độc lập với các ứng dụng khác, mang lại cho các nhà phát triển sự chắc chắn rằng họ có thể xây dựng các ứng dụng sẽ không can thiệp vào nhau.

Là một nhà phát triển, tôi có thể tạo một container có các ứng dụng khác nhau được cài đặt trên đó và đưa nó cho nhóm QA của tôi, những người sẽ chỉ cần chạy container để tái tạo môi trường dành cho nhà phát triển.

4. Lợi ích của Docker

Giờ đây, nhóm QA không cần phải cài đặt tất cả các phần mềm và ứng dụng phụ thuộc để kiểm tra mã và điều này giúp họ tiết kiệm rất nhiều thời gian và năng lượng. Điều này cũng đảm bảo rằng môi trường làm việc nhất quán giữa tất cả các cá nhân tham gia vào quá trình, bắt đầu từ phát triển đến triển khai. Số lượng hệ thống có thể được mở rộng một cách dễ dàng và mã có thể được triển khai trên chúng một cách dễ dàng.

5. Virtualization so với Containerization

Virtualization và Containerization đều cho phép bạn chạy nhiều hệ điều hành bên trong một máy chủ.

Virtualization liên quan đến việc tạo nhiều hệ điều hành trong một máy chủ duy nhất. Mặt khác, Containerization sẽ tạo ra nhiều containers cho mọi loại ứng dụng theo yêu cầu.

Như chúng ta có thể thấy từ hình ảnh, sự khác biệt chính là có nhiều Hệ điều hành khách trong Virtualization không có trong Containerization. Phần tốt nhất của Containerization là nó rất nhẹ so với Virtualization.

6. Dockerfile, Docker Image và Docker Container

  1. Docker Image được tạo bởi chuỗi lệnh được viết trong một tệp được gọi là Dockerfile.
  2. Khi Dockerfile này được thực thi bằng lệnh docker, nó dẫn đến một Docker Image và có tên.
  3. Khi Image này được thực thi bằng lệnh “docker run”, nó sẽ tự khởi động bất kỳ ứng dụng hoặc dịch vụ nào mà nó phải bắt đầu khi thực thi.

7. Docker Hub

Docker Hub giống như GitHub dành cho Docker Image. Về cơ bản, nó là một sổ cloud registry, nơi bạn có thể tìm thấy Docker Image được tải lên bởi các cộng đồng khác nhau, bạn cũng có thể phát triển image của riêng mình và tải lên trên Docker Hub, nhưng trước tiên, bạn cần tạo một tài khoản trên DockerHub.

8. Kiến trúc Docker

Nó bao gồm một Docker Engine là một ứng dụng client-server với ba thành phần chính:

  1. Server là một loại chương trình chạy lâu dài được gọi là quy trình daemon (docker command).
  2. Một API REST chỉ định các giao diện mà các chương trình có thể sử dụng để nói chuyện với daemon và hướng dẫn nó phải làm gì.
  3. Client giao diện dòng lệnh (CLI) (docker command).
  4. CLI sử dụng API Docker REST để điều khiển hoặc tương tác với trình nền Docker thông qua các lệnh CLI kịch bản hoặc trực tiếp. Nhiều ứng dụng Docker khác sử dụng API và CLI cơ bản.

9. Docker Compose

Docker Compose về cơ bản được sử dụng để chạy nhiều Docker Containers như một máy chủ duy nhất. Tôi sẽ cho bạn một ví dụ:

Giả sử nếu tôi có một ứng dụng yêu cầu WordPress, Maria DB và PHP MyAdmin. Tôi có thể tạo một tệp sẽ khởi động cả hai containers như một dịch vụ mà không cần phải khởi động từng tệp riêng biệt. Nó thực sự hữu ích, đặc biệt nếu bạn có kiến trúc microservice.

Nguồn: https://viblo.asia

Leave a Reply

Your email address will not be published. Required fields are marked *