Docker 101 (Phần 1)

Trong những năm gần đây, công nghệ Container ngày càng phát triển và trở nên phổ biến, với gương mặt nổi bật là Docker. Docker được sử dụng từ các công ty hàng đầu thế giới như Google, Uber đến các công ty khởi nghiệp, từ các lập trình viên (Dev) đến những người vận hành hệ thống (Ops).

Vậy Docker là gì? Vì sao Docker trở nên phổ biến như vậy? Vì sao tập người dùng của Docker rộng như vậy (Dev + Ops)? Chúng tôi xin được trình bày một số kiến thức về Docker thông qua chuỗi bài Docker 101.

Phần 1: Docker là gì?

Phần 2: Ai sẽ dùng Docker?

Phần 3: Làm việc với Docker thế nào?

Phần 4: Có thể dùng Docker trong các trường hợp nào?

1.1 Vấn đề triển khai hệ thống phần mềm

Sự phức tạp của việc triển khai hệ thống phần mềm trên nhiều môi trường khác nhau (Nguồn: docker.com)

Với sự phát triển của công nghệ, việc triển khai hệ thống phần mềm trong thực tế ngày càng trở nên phức tạp.

Vấn đề: Các hệ thống phần mềm rất đa dạng về công nghệ.

Câu hỏi: Làm thế nào để các services (dịch vụ) và apps (ứng dụng) có thể tương tác với nhau một cách thích hợp (kết nối được với nhau, không xảy ra xung đột).

Vấn đề: Môi trường triển khai rất đa dạng, từ môi trường Dev, QA server đến môi trường Production Servers, Public Cloud.

Câu hỏi: Làm thế nào để có thể di chuyển (migrate), triển khai hệ thống phần mềm một cách trôi chảy và nhanh chóng?

Với hệ thống phần mềm trên, việc triển khai là một việc phức tạp và tốn nhiều công sức.

Nếu chúng ta có:

  • n: là số lượng phần mềm
  • m: là số lượng môi trường

Chúng ta sẽ cần triển khai nxm lần như hình dưới đây.

Ma trận triển khai phần mềm (Nguồn: docker.com)

1.2 Vấn đề vận chuyển hàng hóa trong giao vận

Trước khi giải quyết vấn đề này, chúng ta cùng xem lại một vấn đề tương tự đã có trong lịch sử: vấn đề vận chuyển hàng hóa trong giao vận.

Sự phức tạp của việc vận chuyển nhiều loại hàng hóa trên nhiều loại phương tiện khác nhau (Nguồn: docker.com)‌‌

Việc vận chuyển hàng hóa trước những năm 1960 gặp vấn đề tương tự:

Vấn đề: Có rất nhiều loại hàng hóa khác nhau.

Câu hỏi:Các hàng hóa có bị trỗn lẫn vào nhau và làm giảm chất lượng không? Ví dụ: Vận chuyển hạt cà phê và gia vị cùng nhau.

Vấn đề:Vận chuyển trên nhiều loại phương tiện khác nhau.

Câu hỏi: Làm thế nào để có thể vận chuyển một cách trôi chảy và nhanh chóng? Ví dụ: vận chuyển hàng hóa từ thuyền lên tàu hỏa, rồi lên xe tải.

Một cách tương tự, chúng ta cũng có ma trận vận chuyển hàng hóa, với:

  • n: là số lượng hàng hóa.
  • m: là số lượng phương tiện.  

Chúng ta sẽ cần nxm lần đóng gói hàng hóa trên các phương tiện khác nhau.

Ma trận vận chuyển hàng hóa (Nguồn: docker.com)‌‌

1.3 Giải pháp gì cho ngành giao vận?

Những người trong ngành giao vận đã phát minh ra Container, phương tiện đóng gói đa năng.

Giải pháp cho giao vận: container (Nguồn: docker.com)‌‌
  • Một container tiêu chuẩn có thể chứa được hầu hết các loại mặt hàng và đóng kín cho đến khi đến được đích cuối cùng.
  • Trong quá trình vận chuyển, container có thể được đặt vào các phương tiện khác nhau, có thể xếp chồng lên nhau, được vận chuyển hiệu quả trên các khoảng cách dài và dễ dàng chuyển từ phương tiện này sang phương tiện khác.
Hệ sinh thái vận chuyển sử dụng container (Nguồn: docker.com)‌‌

Kết quả: Việc phát minh ra container đã tạo nên một hệ sinh thái vận chuyển sử dụng container.

  • 90% hàng hóa được vận chuyển trong các container tiêu chuẩn.
  • Giảm được chi phí và thời gian để nạp và dỡ hàng.
  • Giảm đáng kể tổn thất do trộm cắp hoặc hư hỏng.
  • Giảm tỉ trọng của chi phí vận chuyển trong giá thành phẩm (từ hơn 25% xuống dưới 3%).
  • Hiện nay, có hơn 5000 tàu vận chuyển hơn 200 triệu containers mỗi năm.

1.4 Giải pháp gì cho việc triển khai hệ thống phần mềm?

Docker là một hệ thống vận chuyển container cho phần mềm (Nguồn: docker.com)‌‌

Tương tự như ngành giao vận, những người trong ngành công nghệ thông tin đã phát minh ra công nghệ container cho phần mềm. Và Docker là một giải pháp tiêu biểu cho công nghệ container.

  • Docker là một động cơ (engine) cho phép đóng gói phần mềm như một container nhẹ (lightweight), di động (portable), hoạt động độc lập (self-sufficient).
  • Có thể thao tác bằng cách sử dụng các lệnh tiêu chuẩn, và chạy nhất quán trên hầu hết các nền tảng phần cứng.

Bằng cách sử dụng công nghệ container, vấn đề triển khai hệ thống phần mềm đã được giải quyết, giảm được độ phức tạp của việc triển khai nxm lần xuống còn n lần đóng gói phần mềm vào container.

Docker giải quyết được vấn đề triển khai hệ thống phần mềm (Nguồn: docker.com)‌‌

Kết quả:

  • Thời gian triển khai từ hệ thống phát triển (Dev) sang hệ thống thực (Production) giảm từ 9 tháng xuống còn 15 phút (ING)
  • Thời gian để chạy công việc tích hợp (job) trong hệ thống tích hợp liên tục (CI) giảm hơn 60% (BBC)
  • Thời gian triển khai từ hệ thống phát triển (Dev) sang hệ thống thực (Production) giảm từ vài tuần xuống còn vài phút (Uber)

1.5 Khái niệm cơ bản về Docker

Docker là một công cụ dùng để đóng gói, vận chuyển và chạy container một cách đơn giản và dễ dàng trên các nền tảng khác nhau.

Docker - Build, Ship and Run (Nguồn: docker.com)‌‌

Docker đóng gói một phần mềm trong một hệ thống tập tin (file system) hoàn chỉnh, có chứa mọi thứ cần thiết để chạy, bao gồm:

  • Mã (Code)
  • Runtime
  • Các công cụ hệ thống (System Tools)
  • Các thư viện hệ thống (System Libraries)
  • Bất cứ thứ gì bạn có thể cài trên một server
So sánh Container và Máy ảo (Virtual Machine) (Nguồn: docker.com)‌‌

Docker thực hiện ảo hóa ở mức hệ điều hành. Mỗi container là cô lập (isolated), nhưng dùng chung Kernel và một số bin/thư viện thích hợp. Điều này giúp container triển khai nhanh hơn, ít tốn kém hơn (overhead), di chuyển (migration) dễ dàng và khởi động lại nhanh hơn.

(Còn tiếp ...)

Tài liệu tham khảo

https://www.docker.com/