DevOps Docker

Docker là gì ?

docker-la-gi

Docker

Docker là một nền tảng được xây dựng dựa trên mã nguồn mở, dùng cho việc triển khai và quản lý các ứng dụng chạy trong Container. Để hiểu rõ hơn về Container, chúng ta sẽ so sánh chúng với VM và tìm ra câu hỏi tại sao chúng lại được  sử dụng một cách rộng rãi như vậy.

1. Docker là gì ?

Docker là một nền tảng Container mã nguồn mở. Nó cho phép các lập trình viên đóng gói các ứng dụng, từ đó dễ dàng thực thi các ứng dụng này trên các môi trường khác nhau. Các Container giúp đơn giản hóa việc vận chuyển và phân phối các ứng dụng, do đó chúng ngày càng trở nên phổ biến trong các tổ chức, công ty khi muốn chuyển đổi lên môi trường Cloud hoặc môi trường hybrid.

Docker cung cấp các công cụ cần thiết, giúp các lập trình viên xây dựng, triển khai, thực thi, cập nhật hoặc thậm chí là dừng các Container chỉ bằng câu lệnh hoặc thông qua API.

2. Container làm việc thế nào, và tại sao chúng lại phổ biến.

Containers là một môi trường ảo hóa được xây dựng dựa trên Kernel Linux, chúng thực thi các tác vụ một cách độc lập. Container có một vài thành phần như control groups (Cgroups) dùng để phân bổ tài nguyên giữa các Process, Namespaces  dùng cho việc quản lý, hạn chế truy cập hoặc chia sẻ tài nguyên ( CPU, Ram,..)  giữa các process của các môi trường khác nhau.

Công nghệ Container cung cấp tất các tính năng và lợi ích của VM, bao gồm thực thi các ứng dụng độc lập, khả năng mở rộng linh hoạt, cộng thêm một vài lợi ích như sau:

  • Dung lượng: Không giống như VM, Container không chứa toàn bộ OS. Nó chỉ bao gồm một vài process và thành phần cần thiết của OS, dùng để thực thi code. Dung lượng Container chỉ khoảng vài Mb, trong khi đó VM lên tới Gb. Từ đó, giúp chúng sử dụng hardware hiệu quả và khởi động nhanh hơn.
  • Sử dụng tài nguyên hiệu quả: Đối với các Container, bạn có thể chạy nhiều bản copy của các ứng dụng trên cùng một máy chủ. Điều này sẽ giúp giảm chi phí khi sử dụng hạ tầng Cloud.
  • Tăng hiệu suất cho Lập trình viên: So với các VM, các Container triển khai nhanh hơn, dễ dàng provision và khởi động lại ứng dụng. Chính vì vậy, nó được sử dụng trong quá trình CI/CD ( continuous integration / continuous delivery ), phù hợp với phương pháp Agile và DevOPS.

3. Tại sao lại sử dụng Docker

Docker ngày nay rất phổ biến, vì vậy “Docker” và “Container” được sử dụng thay thế cho nhau. Thế nhưng, các công nghệ liên quan tới container đã được sử dụng vào nhiều năm trước đây, trước khi Docker phát hành vào năm 2003.

Đáng chú ý nhất là vào năm 2008,  LinuXContainers (LXC) được triển khai trong Nhân ( Kernel) của Linux. Nó cho phép ảo hóa toàn bộ một phiên bản Linux. Mặc dù LXC vẫn còn được sử dụng cho đến nay, tuy nhiên nhiều công nghệ mới hơn đã ra đời và hiệu quả hơn. Điển hình là Ubuntu, một hệ điều hành mã nguồn mở cũng có tính năng này.

Docker đã cải thiện, và tăng cường khả năng Container hóa với những công nghệ cho phép:

  • Cải thiện — liền mạch — và tính di động: Trong khi LXC container cần phải chỉ định cấu hình tới một máy chủ cụ thể mới chạy được. Trong khi đó, Docker không cần điều đó.
  • Dung lượng nhẹ và tối ưu cập nhật hơn: Đối với LXC, nhiều process được kết hợp lại với nhau trong một Container. Riêng đối với Docker container, một process có thể chạy trong một Container. Điều này sẽ giúp ích trong quá trình xây dựng ứng dụng có thể liên tục, không bị gián đoạn khi có một phần của nó bị gỡ bỏ trong lúc cập nhật hoặc sửa lỗi.
  • Tự động tạo Container: Docker có thể tự động xây dựng một Container dựa trên source code của application có sẵn.
  • Tạo phiên bản cho Container: Docker có thể theo dõi các phiên bản của container image, có thể khôi phục lại bản trước đó và theo dõi xem ai là người xây dựng phiên bản và bằng cách nào.
  • Tái sử dụng Container: Từ các Container hiện có, ta có thể tạo nên một images. Về cơ bản, nó giống như từ template xây dựng ra nhiều bản container mới.
  • Chia sẻ Container: Các Lập trình viên có thể truy cập mã nguồn mở của registry, nơi chứa hàng nghìn Container do người dùng đóng góp.

Hiện tại, Docker cũng hỗ trợ chạy trên các nền tảng của Windows, và hầu như các nhà cung cấp dịch vụ Cloud đều hỗ trợ dịch vụ này, để giúp các Lập trình viên xây dựng, vận chuyển và thực thi ứng dụng với Docker.

4. Các công cụ và điều khoản của Docker

Một vài công cụ và thuật ngữ bạn sẽ gặp khi sử Docker, bao gồm:

4.1. DockerFile

Mỗi Docker Container bắt đầu với một tệp tin văn bản dùng để hướng dẫn cách xây dựng một  Docker images. Dockerfile tự động xử lý quá trình tạo Docker Images. Về cơ bản, đây là một tập hợp các command line ( CLI ) hướng dẫn Docker Engine thực thi để tạo ra image.

4.2. Docker images

Docker images chứa source code của ứng dụng cũng như tất cả các thư viện cần thiết, để thực thi ứng dụng trong Container. Từ Docker Image, chúng ta có thể tạo ra một hoặc nhiều Container.

Docker images có thể xây dựng từ Base image, đây là image chỉ chứa các thư viện cần thiết. Từ đây, các lập trình viên có thể sử dụng nó làm nền tảng và xây dựng thêm các thư viện và source code bổ sung của họ.

Docker images được tạo nên từ nhiều Lớp ( layer ), mỗi lớp tương ứng với mộ t phiên bản của images. Bất kỳ khi nào Lập trình viên tạo một thay đổi trên images, thì một lớp trên cùng sẽ được tạo ra, lớp này sẽ thay thế lớp trên cùng của bản trước đó, để trở thành phiên bản hiện tại của images. Các lớp trước đó sẽ được lưu lại để phục vụ cho việc khôi phục hoặc sử dụng lại một Project khác.

Mỗi khi một Container được tạo ra từ images docker, thì sẽ có một lớp mới được gọi là Container được tạo ra. Mọi thay đổi tác động trên container này, chẳng hạn như thêm, xóa các tệp tin… Điều này chỉ được lưu trong lớp Container và tồn tại khi Container đang chạy. Nhiều Container được tạo ra từ một image duy nhất, chúng sẽ tận dụng một ngăn xếp chung từ đó mang lại hiệu năng tốt hơn.

4.3. Docker containers

Docker container là một bản trực tiếp, đang chạy một image Docker. Trong khi images Docker chỉ có trạng thái read-only, còn Container có thể tương tác và điều chỉnh bằng command.

4.4. Docker daemon

Docker daemon là một dịch vụ được chạy trên hệ điều hành như Microsoft Windows, Apple MacOS hoặc iOS. Nhiệm vụ của nó là quản lý các Image Docker thông qua các câu lệnh từ phía Client. Nó hoạt động như một trung tâm điều khiển của Docker.

4.5. Docker registry

Docker registry là một nơi lưu trữ các Images Docker. Tại đây, chúng ta có thể lưu trữ và theo dõi các images với nhiều phiên bản khác nhau, bằng cách sử dụng “Tag”. 

5. Docker deployment và orchestration

Nếu bạn chỉ có một vài Container, thì việc quản lý ứng dụng của bạn với Docker Engine khá đơn giản. Tuy nhiên, nếu Container lên đến hàng trăm, hàng nghìn thì việc quản lý thủ công là một thảm họa. Do đó, các công cụ Deployment và Orachestration đã ra đời để khắc phục điều đó. 

5.1. Docker Compose

Đây là một công cụ giúp chúng ta có thể biên soạn, cấu hình các Container theo cấu trúc YAML. Chúng ta có thể dễ dàng triển khai nhiều ứng dụng và container docker một cách nhanh chóng và dễ dàng. 

5.2. Kubernetes

Để có thể giám sát và quản lý vòng đời của các Container trong môi trường phức tạm, bạn sẽ cần tới một công cụ điều phối container.  Hoặc chúng ta có thể Docker Swarm hoặc Kubernetes.

Kubernetes là một chương trình điều phối Container thuộc mã nguồn mở. Đây là một dự án được phát triển bởi Google. Kubernetes có thể lập lịch và tự động các tác vụ liên quan tới cấu trúc của Container, bao gồm: Container Deployment, update, service discovery, Storage provisioning, Load balacing, health monitoring,… Thêm vào đó, có nhiều công cụ hỗ trợ trong hệ sinh thái của Kubernetes như  IstioKnative, sẽ giúp chúng ta nâng cao tính sẵn sàng và hiệu suất của dịch vụ. 

Mã Bài Viết: 098933

        Nguồn:                                     Truy Cập Diễn Đàn Ngay

congdonglinux.com                            forum.congdonglinux.com

   [maxbutton id=”2″ ]                            [maxbutton id=”3″ ] 

Đăng ký liền tay Nhận Ngay Bài Mới

Subscribe ngay

Cám ơn bạn đã đăng ký !

Lỗi đăng ký !

Add Comment

Click here to post a comment

Đăng ký liền tay
Nhận Ngay Bài Mới

Subscribe ngay

Cám ơn bạn đã đăng ký !

Lỗi đăng ký !