Tìm hiểu cơ bản về Docker [Phần 1]

Tác giả: 26/02/2023

Chào anh chị và các bạn, hiện tại em đang là thực tập sinh tại công ty cổ phần phần mềm Nhân Hòa.

Đợt này Sếp có giao cho em đề tài tìm hiểu về Docker, em cũng đọc và tìm hiểu một số tài liệu trên mạng và đúc kết lại một số kiến thức cho riêng mình và em xin chia sẻ với mọi người qua bài viết này.Do thời giạn nghiên cứu và kiến thức còn hạn chế, em sẽ chỉ trình bày các nội dung cơ sở về Docker:

  • Docker và các khái niệm, thành phần.
  • Cài đặt docker
  • Network trong docker
  • Mount trong docker
  • Demo triển khai LAMP bằng Docker…

Phần I – Khái niệm và các thành phần của Docker

Bản thân mình là một người ban đầu cũng chưa hiểu gì về docker, mình rất tò mò vì trên mạng có rất nhiều khái niệm và tài liệu nói về docker, và mình sẽ chia sẻ cái nhìn về docker của mình như sau

  • Docker ra đời vào khoảng những năm 2013-2014.
  • Docker chỉ là 1 công cụ tạo môi trường ảo
  • Người sử dụng docker là những lập trình viên, khi mà họ muốn triển khai nhanh một ứng dụng mà không cần quan tâm hay cấu hình nhiều  về môi trường chạy ứng dụng.Người cài đặt docker có thể là các developer hoặc các systemadmin.

Nếu như không có docker thì mỗi khi chúng ta cần triển khai ứng dụng, chúng ta vẫn sẽ phải tạo ra môi trường trên máy ảo,bạn có thể hình dung sự phức tạp tạo các môi trường ứng dụng khác nhau như hình vẽ:Nó sẽ tạo ra 1 ma trận các môi trường triển khai, mỗi môi trường triển khai trên 1 máy ảo.Bạn hãy nhìn hình dưới

Nhìn vào hình vẽ chúng ta có thể thấy rằng , việc sử dụng máy ảo ( hình bên trái ) phức tạp và tốn tài nguyên hơn nhiều so với việc sử dụng docker ( docker engine) để tạo môi trường ảo.

Hình bên trái bạn có nhiều máy ảo, trên các máy ảo bạn cài hệ điều hành, rồi cài thư viện, phần mềm… rồi cuối cùng bạn triển khai ứng dụng, hình bên phải bạn sử dụng docker để đóng gói phần mềm vào 1 container(nói đến đây bạn cần quan tâm đến khái niệm container + images ,mình sẽ trình bày ở phần bên dưới).

Mình có thể lấy ví dụ thực tế để các bạn hình dung về độ phức tạp và cồng kềnh giữa việc sử dụng Virtual machine và sử dụng docker : Bạn nuôi 1 con cá trong 1 cái chậu cá, bạn bê cái chậu cá này đi đâu cũng được con cá vẫn sống , ứng dụng vẫn chạy, môi trường không đổi so với việc phức tạp hơn là khi bạn di chuyển con cá từ cái ao này sang cái ao khác, bạn phải tạo môi trường sống tương tự như môi trường ao cũ ( máy ảo).

Kiến trúc của service hoạt động trên Docker container

Nếu so sánh với kiến trúc của service khi hoạt động trên nền tảng máy ảo, service hoạt động trên Docker container sẽ loại bỏ lớp “Guest OS”, với tốc độ khởi tạo service nhanh hơn hẳn so với việc sử dụng máy ảo. Docker Container sẽ giảm thiểu và đơn giản hóa các bản cập nhật bảo mật. Kiến trúc của service khi hoạt động trên nền tảng Docker container thông qua ảnh minh họa bên dưới:

  • Infrastructure (hạ tầng):có thể là laptop, một server chuyên dụng (dedicated server) hoat động trong một trung tâm dữ liệu (Data Center) hoặc một server riêng ảo (Virtual Private Server – VPS) trên cloud như DigitalOcean, Amazon, GCP,…
  • Host Operating System (hệ điều hành của server)hệ điều hành đang sử dụng cho server đang sử dụng, có thể là macOS, Windows hoặc Linux.
  • Docker daemon (còn gọi là Docker Engine):đây là service hoạt động trên server, được dùng để quản lý các thành phần cần thiết để khởi tạo và tương tác với Docker container.
  • Bins / Libs (các tập tin / thư viện cần thiết):các gói tập tin, thư viện đi kèm của service được thêm vào Docker image.
  • App (application – service): mã nguồn của các ứng dụng, phần mềm được thêm vào Docker container.

Sự khác nhau giữa máy ảo và Docker Container

Docker daemon có thể giao tiếp trực tiếp với hệ điều hành của server và phân bổ tài nguyên cho các Docker container đang chạy, đảm bảo mỗi container hoạt động độc lập với các container khác và hệ điều hành của server. Thay vì phải đợi một phút để máy ảo khởi động, người dùng có thể khởi động Docker container chỉ trong vài mili giây và tiết kiệm được rất nhiều dung lượng ổ đĩa và các tài nguyên hệ thống khác do không cần phải sử dụng “guest OS” cồng kềnh cho mỗi ứng dụng. Người dùng sẽ không cần ảo hóa vì Docker chạy trực tiếp trên hệ điều hành của server.

Docker cho lập trình viên

  • Tính đóng gói (encapsulation): Không lo lắng về việc thiếu thư viện phụ thuộc , thông tin cấu hình ( config) khi triển khai một ứng dụng.Build một lần và chạy mọi nơi.
  • Tính cô lập (isolation) : Tránh được xung đột khi chạy nhiều ứng dụng trên một máy.
  • Tính di động ( portable) : Có thể dễ dàng chạy ứng dụng trên nhiều máy khác nhau, không cần cài đặt lại.
  • Có thể kịch bản hóa (script): Các công việc như kiểm thử tự đông ( automation testing ), tích hợp ( intergration ), đóng gói (packaging).
  • Nhỏ gọn, chạy nhanh và ít tốn kém ( overhead) hơn nhiều so với máy ảo (virtual machine).

Docker cho DevOPs

  • Giúp cho việc quản lý toàn bộ vòng đời (lifecycle) của ứng dụng hiệu quả nhất quán và có thể lặp lại.
  • Tăng chất lượng mã code
  • Loại bỏ xung đột giữa các môi trường phát triển, thử nghiệm và môi trường thực( production).
  • Cài thiện đáng kể về tốc độ và độ tin cậy của hệ thống tích hợp và triển khai liên tục ( CI/CD System).
  • Tiết kiệm chi phí về thời gian , tài nguyên.

Các thành phần hay gặp trong docker

  • Image : là read-only template dùng để tạo containers, được cấu tạo theo dạng layer, và tất cả các layers là read-only.Có thể tạo Docker Image bằng cách build từ Docker File hoặc commit từ Docker Container
  • Container : là một runable instance của một Docker Image. Khi chạy một container từ một Image , sẽ có một wriable layer được tạo ra và tất cả các thay đổi về dữ liệu sẽ diễn ra ở layer này.Lúc này có thể sử dụng lệnh commit một container để tạo một image mới.
  • Network : cung cấp private network ( VLAN) để các container trên một host có thể liên lạc được với nhau, hoặc các container trên nhiều hosts có thể liên lạc được với nhau (multi-host networking).
  • Volume : dùng để lưu trữ các dữ liệu độc lập với vòng đời của container và giúp các container có thể chia sẻ dữ  liệu với nhau và với host.

Hẹn gặp lại các bạn tại phần tiếp theo [Phần 2]Tìm hiểu cơ bản về Docker -Cài đặt Docker.

 

Trả lời