Docker là gì ?

Docker là một nền tảng ứng dụng dựa trên các container, cho phép nhà phát triển xây dựng, đóng gói và chạy ứng dụng trên các container. Docker cho phép các ứng dụng được đóng gói cùng với các thư viện và các tài nguyên khác trong một container duy nhất, giúp tăng cường tính di động và độc lập của ứng dụng.

Sẽ có một số các thuật ngữ mà có thể sẽ khó hiểu, mình sẽ cố gắng giải thích vào phần sau ở 0x02 - Khái niệm cơ bản.

Các ứng dụng khác giống với Docker bao gồm các nền tảng container khác như Kubernetes, Podman và rkt. Tuy nhiên, Docker vẫn là một trong những nền tảng phổ biến nhất được sử dụng trong các dự án phát triển hiện nay.

Docker hay Máy ảo ?

Sự giống nhau của Docker với máy ảo là cả hai đều cho phép người dùng tạo ra một môi trường tách biệt để chạy các ứng dụng. Tuy nhiên, máy ảo sử dụng một hệ điều hành đầy đủ và phải chạy trên một hypervisor, trong khi Docker sử dụng một lớp trừu tượng hơn là hệ điều hành máy chủ thực để quản lý các container của nó.

Ngoài ra, Docker cũng có thể được sử dụng để xây dựng và phân phối các ứng dụng microservice. Điều này có nghĩa là các ứng dụng được chia nhỏ thành các thành phần nhỏ hơn, được đóng gói và triển khai trong các container riêng lẻ. Điều này giúp cho việc phát triển, kiểm thử và triển khai các ứng dụng trở nên đơn giản hơn.

Một lý do khác là máy ảo tiêu tốn nhiều tài nguyên hơn so với Docker. Do máy ảo phải có một hệ điều hành đầy đủ nên nó sẽ cần một lượng lớn bộ nhớ và tài nguyên CPU để chạy. Nếu bạn cần chạy nhiều máy ảo trên một máy tính, điều này sẽ tiêu tốn rất nhiều tài nguyên của hệ thống. Trong khi đó, Docker sử dụng cùng một hệ điều hành cho nhiều container, giúp tiết kiệm tài nguyên hơn.

Với tính năng đóng gói, phân phối và chạy các ứng dụng trong các container, Docker đã trở thành một công cụ hữu ích trong quá trình phát triển phần mềm.

Dưới đây là hình minh họa đơn giản cho để so sánh cho việc dùng Docker hay Máy Ảo

image

Lý do nên dùng Docker

Vậy tại sao lại cần sử dụng Docker? Lý do đầu tiên là để giảm thiểu sự phức tạp trong việc quản lý hệ thống. Khi triển khai một ứng dụng trên máy ảo, ta phải tạo ra một hệ thống hoàn chỉnh với các phần mềm, thư viện, cài đặt hệ điều hành, tài nguyên phần cứng, cấu hình mạng, … Điều này có thể mất rất nhiều thời gian và tốn kém về chi phí, độ phức tạp sẽ gia tăng tùy vào dự án.

Ví dụ, khi bạn cần triển khai ứng dụng của mình trên môi trường khác nhau, ví dụ như một ứng dụng web được viết bằng PHP. Một ứng dụng PHP có thể yêu cầu các phiên bản khác nhau của PHP hoặc các thư viện PHP cụ thể để hoạt động. Khi triển khai ứng dụng trên môi trường mới, bạn có thể phải cài đặt các phiên bản khác nhau của PHP hoặc thư viện, tuy nhiên điều này có thể dẫn đến xung đột và sự không ổn định. Với Docker, bạn có thể đóng gói toàn bộ ứng dụng và các yêu cầu cần thiết của nó vào một container, và sau đó triển khai container đó trên bất kỳ môi trường nào mà không cần phải lo lắng về các xung đột về phần mềm.

Nói đơn giản là, chỉ cần bạn cấu hình Docker Container một lần, các máy khác, nếu đã cài đặt Docker, thì sẽ chạy được dự án đó mà không cần gì khác.

Ngoài ra, Docker cũng cho phép bạn dễ dàng mở rộng hệ thống của mình bằng cách tăng số lượng container. Bạn có thể sử dụng các công cụ quản lý và triển khai container như Kubernetes hoặc Docker Swarm để tự động hóa việc triển khai các container mới và phân phối tải cho các container đang hoạt động.

Với Docker, bạn cũng có thể quản lý tất cả các container của mình từ một định dạng cấu hình, cho phép bạn dễ dàng chia sẻ và tái sử dụng chúng trên các hệ thống khác nhau. Ngoài ra, khi cập nhật các thành phần của ứng dụng, bạn có thể dễ dàng tạo ra các phiên bản mới của container và chạy chúng song song với phiên bản cũ, giúp đảm bảo rằng các thay đổi không gây ra tác động tiêu cực đến ứng dụng.

Docker trên Linux hay trên Windows ?

Cấu trúc của Docker trên Windows vs Docker trên Linux

windows_vs_linux

Nếu bạn có thể, mình khuyên là nên sử dụng Docker trên Linux. Bời vì Docker được xây dựng cho các hệ thống dựa trên Linux và được sử dụng rộng rãi trên các hệ thống Linux này. Sử dụng Docker trên Linux cũng có nhiều lợi ích, bao gồm hiệu suất tốt hơn và hỗ trợ tốt hơn cho các tính năng mới.

Một số các lý do tại sao sử dụng Docker trên Windows có thể không lý tưởng:

  1. Hiệu suất: Docker Engine được xây dựng cho các hệ thống dựa trên Linux, do đó, việc chạy Docker trên Windows yêu cầu thêm các lớp trừu tượng và dịch thuật. Điều này có thể dẫn đến hiệu suất chậm hơn và sử dụng tài nguyên cao hơn so với việc chạy Docker trên Linux.
  2. Tương thích: Một số image và ứng dụng Docker có thể không tương thích với Windows. Nhiều Docker image được xây dựng cho các hệ thống Linux, vì vậy việc chạy nó trên Windows có thể yêu cầu cấu hình bổ sung hoặc thậm chí phải sửa đổi mã nguồn ứng dụng.
  3. Dung lượng: Docker trên Windows sử dụng máy ảo (WSL) để chạy các container, điều này có thể tiêu thụ một lượng lưu trữ đáng kể. Ví dụ Ubuntu trên Windows có thể tốn hơn 10GB bộ nhớ của máy. Ngoài ra, cơ chế chia sẻ tệp mặc định giữa máy chủ và máy ảo có thể chậm và không đáng tin cậy.

Tuy nhiên, nếu bạn đang sử dụng hệ điều hành Windows và không thể chuyển sang dùng Linux, thì Docker trên Windows vẫn là một công cụ hữu ích cho việc bắt đầu làm quen với Docker căn bản. Hơn nữa nếu bạn là người thích khổ jâm, do vấn đề hiệu suất, dùng Docker trên Windows sẽ cho bạn một trải nghiệm cực khoái, bởi thời gian khi build một ứng dụng Docker sẽ là vài phút :) Trong khi đó cùng với một dự án thì Linux tốn nhiều nhất là 20s.

F.ck Windows :D

P/S: Nói vậy thôi, chứ Windows chơi game hơi bị ngon.

Tạm kết

Như vậy, Docker là một công cụ vô cùng hữu ích và phổ biến trong ngành công nghệ thông tin hiện nay, cho phép các nhà phát triển phát triển, chạy và triển khai các ứng dụng một cách nhanh chóng và dễ dàng. Bằng cách sử dụng Docker, người dùng có thể tạo ra các container độc lập với nhau, giúp việc phát triển và triển khai ứng dụng trở nên đơn giản hơn, tăng tính di động.

Lý do Docker trở nên phổ biến là do nó tiết kiệm tài nguyên hệ thống, giảm thiểu thời gian triển khai và đảm bảo tính tương thích giữa các môi trường phát triển, kiểm thử và sản xuất. Nó cũng hỗ trợ các tính năng khác như cài đặt và quản lý các phần mềm và thư viện phụ thuộc, giúp hệ thống của bạn trở nên nhanh chóng, hiệu quả và linh hoạt hơn.

Với sự phổ biến của cloud computing và các dịch vụ đám mây, việc sử dụng Docker để triển khai và quản lý các ứng dụng trên các môi trường đám mây trở nên phổ biến hơn bao giờ hết. Ví dụ, khi triển khai các ứng dụng trên các dịch vụ đám mây như AWS, Azure hoặc Google Cloud Platform, Docker có thể giúp bạn đóng gói ứng dụng và các yêu cầu cần thiết của nó vào các container, từ đó giảm thiểu các vấn đề liên quan đến việc triển khai trên các server phần cứng thật, yêu cầu các kỹ năng cao về quản lý hệ thống.

Trong tương lai, việc sử dụng Docker dự kiến sẽ còn phát triển và trở nên phổ biến hơn nữa, đặc biệt là khi các công nghệ mới như container orchestration và microservices đang trở thành xu hướng trong lĩnh vực phát triển ứng dụng.


Kunniii on Github