Container và Docker
Container là gì?
Chắc bạn cũng đã từng nghe đến câu nói "Write once, run anywhere" tạm dịch là "Viết một lần, chạy mọi nơi", 1 câu cửa miệng của công ty SUN Microsystem để nói đến 1 tính chất phổ biến của ngôn ngữ Java. Đây là 1 mô hình tuyệt vời, ngoại trừ việc ứng dụng của bạn phải là một ứng dụng Java và để có thể chạy nó ở bất cứ đâu, thì bạn cần có 1 nền tảng triển khai cụ thể, đó là Java Virtual Machine. Ngoài ra, một cách khác để ứng dụng của bạn có thể "chạy được mọi nơi", đó chính là sử dụng Máy Ảo. Với cách tiếp cận này, mặc dù linh hoạt, nhưng phải trả giá bằng kích thước file image của máy ảo lớn, chi phí IO (input-output) cao và chi phí bảo trì cao.
Và điều gì sẽ xảy ra nếu có một thứ gì đó nhẹ về mặt lưu trữ, nhưng đủ khả năng để ứng dụng có thể chạy ở mọi nơi và không phụ thuộc vào bất kì ngôn ngữ lập trình nào?
Và đó chính là lí do mà Container được tạo ra! Container là một công nghệ cho phép bạn kết hợp, lưu trữ mã của mình và các phần phụ thuộc của nó vào một gói nhỏ, gọn gàng - một image. Sau đó, image này có thể được sử dụng để tạo ra một phiên bản ứng dụng của bạn - một container. Sự khác biệt cơ bản giữa container và Máy ảo là container không chứa luôn cả bộ hardware hypervisor. Để biết thêm về sự khác biệt giữa Container và Virtual Machine thì hãy vào phần so sánh giữa 2 giải pháp này.
Giải pháp này sẽ giải quyết một số vấn đề:
- Chạy được ứng dụng mà không có giới hạn dành riêng cho từng nền tảng, IDE hoặc ngôn ngữ lập trình.
- Kích thước image nhỏ, giúp vận chuyển và lưu trữ dễ dàng hơn.
- Không có vấn đề về sự tương thích, liên quan đến các phụ thuộc, phiên bản hay cách thức cài đặt.
- Triển khai các phiên bản ứng dụng nhanh chóng và dễ dàng.
- Các ứng dụng và tài nguyên của chúng được tách biệt, dẫn đến tính bảo mật và mô-đun tốt hơn.
🐋-Docker là gì?
Docker là một dự án mã nguồn mở cung cấp giải pháp phát triển phần mềm được gọi là vùng chứa - container. Để hiểu Docker, bạn cần biết container là gì. Như đã nói ở trên, một container như là "một gói có tính chất nhẹ, độc lập, và có thể thực thi, của một phần mềm bao gồm mọi thứ cần thiết để chạy nó." Và vì container không phụ thuộc vào nền tảng gì, nên Docker có thể chạy trên cả nền tảng Windows, Linux,.v.v. . Trên thực tế, Docker cũng có thể được chạy trong một máy ảo nếu cần. Mục đích chính của Docker là nó cho phép bạn chạy các ứng dụng microservice trong một kiến trúc phân tán.
Thành phần của Docker
Kiến trúc của Docker cũng dựa trên kiểu máy khách-máy chủ. Tuy nhiên, nó phức tạp hơn một chút so với máy ảo vì các tính năng liên quan. Nó bao gồm bốn phần chính:
- Docker Client: Đây là nơi mà bạn tương tác với các container của mình. Cũng có thể gọi nó là giao diện người dùng của Docker.
- Docker Object: Đối tượng của Docker là các thành phần chính của Docker bao gồm: container và image. Container như là 1 nơi để các ứng dụng của bạn đọc và ghi vào. Container Images là những file chỉ có thể dọc và được sử dụng để tạo các container.
- Docker Deamon: Trình chạy Docker là 1 tiến trình chạy dưới nền, tiến trình này chịu trách nhiệm tiếp nhận các câu lệnh và chuyển chúng đến các container.
- Docker Registry: Thường được nhắc đến là Docker Hub, đây là nơi lưu trữ và truy xuất các container image của bạn.
Để biết thêm thì hãy truy cập Kiến trúc của Docker, Docker Desktop