+1

Ngừng sử dụng Docker? Hành trình tìm kiếm giải pháp thay thế tốt hơn của tôi

Nếu bạn hỏi tôi vài năm trước rằng liệu tôi có thể tưởng tượng làm việc mà không có Docker hay không, có lẽ tôi đã bật cười. Khi đó, Docker là mặc định cho hầu hết mọi đội nhóm mà tôi biết. Cần một database? docker run là có. Cần đảm bảo môi trường nhất quán? Dùng docker-compose. Mọi thứ nghe thật hoàn hảo, và trong một thời gian, nó thực sự đã giải quyết được rất nhiều vấn đề.

Nhưng theo thời gian, tôi dần nhận ra rằng, đặc biệt là trong môi trường phát triển cục bộ (local development), Docker bắt đầu gây ra nhiều rắc rối hơn là giá trị mà nó mang lại. Đội của tôi bắt đầu tự hỏi một câu đơn giản: "Chúng ta vẫn dùng Docker vì nó là lựa chọn tốt nhất, hay chỉ vì mọi người đều làm vậy?"

Mô tả hình ảnh

Câu trả lời đáng ngạc nhiên là đối với phát triển cục bộ, Docker đang làm chúng tôi chậm lại. Bài viết này không phải để đả kích Docker; chúng tôi vẫn sử dụng nó trong các quy trình sản xuất (production) và CI/CD. Thay vào đó, tôi muốn chia sẻ lý do tại sao chúng tôi từ bỏ nó cho môi trường local và những công cụ nào cuối cùng đã trở thành giải pháp thay thế Docker tốt hơn.

Từ 'tuần trăng mật' đến những cơn đau đầu

Khi tôi mới bắt đầu với Docker, tôi đã thực sự choáng ngợp. Chắc chắn, nó có một đường cong học tập dốc và tôi đã gặp phải rất nhiều cạm bẫy, nhưng khi đó, tôi đang ở trên đỉnh cao, cảm thấy mình như một thiên tài khi thuần phục được một công cụ phức tạp như vậy. Thêm vào đó, Docker đã cho phép tôi nói lời tạm biệt với việc thiết lập môi trường tẻ nhạt. Phiên bản cơ sở dữ liệu và bộ đệm của mọi người đều hoàn toàn giống nhau, đó là một sự nhẹ nhõm rất lớn.

Tất nhiên, có những vấn đề nhỏ ở đây và ở đó. Nhưng những ngày vui không kéo dài. Chẳng mấy chốc, những trục trặc nhỏ đó dần tích tụ thành những rào cản lớn hàng ngày.

Nó 'ngốn' tài nguyên máy tính của chúng tôi

Chạy nhiều container cùng một lúc — máy chủ ứng dụng, cơ sở dữ liệu, bộ đệm, message broker — tiêu thụ một lượng lớn CPU và bộ nhớ. Quạt Mac của tôi quay như động cơ phản lực, và pin thì hết trong nháy mắt. Một phiên "bắt đầu viết mã" đơn giản biến thành hàng phút chờ đợi container khởi động, trong khi máy của tôi chạy ì ạch.

Đồng bộ file là một cơn ác mộng

Nhận được phản hồi ngay lập tức sau khi thay đổi mã là điều cơ bản đối với bất kỳ nhà phát triển nào. Nhưng với các volume mount của Docker, đặc biệt là trên macOS và Windows, hiệu suất I/O chậm một cách đau đớn. Việc đợi thêm vài giây để trang làm mới sau khi thay đổi một dòng mã nghe có vẻ không đáng kể, nhưng nó sẽ cộng dồn khi bạn làm điều đó hàng trăm lần một ngày.

Việc gỡ lỗi (debug) trở nên phức tạp hơn

Khi có sự cố xảy ra bên trong container, việc gỡ lỗi phức tạp hơn nhiều so với việc chạy ứng dụng nguyên bản (natively). Gắn trình gỡ lỗi, kiểm tra nhật ký (log), hoặc theo dõi hiệu suất đều cần thêm các bước. Chúng tôi đã dành quá nhiều thời gian để giải quyết "vấn đề của container" thay vì giải quyết các vấn đề kinh doanh thực sự.

Chất xúc tác cho sự thay đổi: Sự chuyển dịch trong mô hình kinh doanh

Sự thay đổi trong mô hình kinh doanh của Docker Desktop là một bước ngoặt lớn. Vấn đề không hoàn toàn nằm ở chi phí; quan trọng hơn, nó đã phá vỡ nhận thức của nhiều nhà phát triển rằng Docker là một phần cơ bản của cơ sở hạ tầng. Sự thay đổi này hoạt động như một chất xúc tác, buộc đội của tôi phải dừng lại và đánh giá một cách nghiêm túc công cụ mà chúng tôi sử dụng hàng ngày. Chúng tôi bắt đầu tự hỏi: Liệu sự phụ thuộc của chúng ta vào Docker Desktop đã trở thành một thói quen? Giờ đây, khi nó là một sản phẩm thương mại với các điều khoản cấp phép rõ ràng, liệu nó có còn mang lại giá trị tốt nhất cho việc phát triển cục bộ không? Chính khoảnh khắc này đã thúc đẩy chúng tôi chủ động tìm kiếm và đánh giá các lựa chọn khác trên thị trường, thay vì chấp nhận thụ động hiện trạng. Mục tiêu của chúng tôi là tìm một công cụ—dù miễn phí hay không—mang lại hiệu quả cao hơn và trải nghiệm tốt hơn cho quy trình phát triển cục bộ của chúng tôi.

Hành trình tìm kiếm giải pháp thay thế của tôi: Hai con đường tôi đã khám phá

Cuộc tìm kiếm của tôi đi theo hai hướng: thứ nhất, tìm kiếm các công cụ container hóa nhẹ hơn, và thứ hai, thoát khỏi tư duy container hoàn toàn và quay trở lại một môi trường phát triển cục bộ trực tiếp hơn.

Con đường 1: Các công cụ container hóa tốt hơn

Đối với các nhà phát triển vẫn cần container hoặc có quy trình làm việc tích hợp chặt chẽ với Kubernetes, việc từ bỏ Docker Desktop không có nghĩa là từ bỏ container hóa. Có một số lựa chọn thay thế tuyệt vời có sẵn.

  • Podman: Được phát triển bởi Red Hat, tính năng chính của nó là kiến trúc không có daemon (daemonless). Điều này có nghĩa là nó tiêu thụ ít tài nguyên hơn và an toàn hơn. Giao diện dòng lệnh của nó gần như giống hệt Docker, vì vậy bạn thậm chí có thể sử dụng alias docker=podman để chuyển đổi liền mạch với đường cong học tập tối thiểu.

Mô tả hình ảnh

  • Colima: Nếu bạn là người dùng macOS, Colima là một lựa chọn tuyệt vời. Nó cực kỳ nhẹ, khởi động nhanh và tiêu thụ tài nguyên thấp. Nó sử dụng Lima (máy ảo Linux trên macOS) bên dưới để cung cấp môi trường Linux cho các container và tương thích với Docker CLI.

  • Rancher Desktop: Dự án mã nguồn mở này cung cấp một ứng dụng máy tính để bàn tích hợp cả quản lý Kubernetes và container. Nếu bạn không chỉ cần container mà còn cả một cụm K8s cục bộ, Rancher Desktop là một lựa chọn toàn diện.

Những công cụ này giúp giảm bớt một số lo ngại về hiệu suất và giấy phép của Docker Desktop. Tuy nhiên, trên macOS và Windows, chúng vẫn dựa vào ảo hóa, có nghĩa là chúng không thể loại bỏ hoàn toàn chi phí hiệu suất vốn có.

Con đường 2: Quay trở lại môi trường tích hợp truyền thống nhưng hiệu quả hơn

Ngay khi tôi sắp bỏ cuộc, tôi đã khám phá ra một con đường khác: Tại sao phát triển cục bộ lại phải ở trong một container? Đặc biệt đối với các đội như của tôi, chủ yếu tập trung vào phát triển web, tất cả những gì chúng tôi thực sự cần là các phiên bản ổn định của PHP, Node.js, MySQL, Redis, v.v.

Điều này đã dẫn tôi đến việc khám phá thế hệ mới của các môi trường phát triển tích hợp cục bộ.

ServBay

Đây là khám phá lớn nhất của tôi gần đây, và bây giờ nó là công cụ chính của tôi. Bạn có thể coi nó như một phiên bản siêu cấp của MAMP. ServBay giải quyết nhiều vấn đề nhức nhối của các môi trường tích hợp truyền thống (như MAMP và XAMPP).

Mô tả hình ảnh

  • Hiệu năng vượt trội: Vì tất cả các dịch vụ đều chạy nguyên bản trên máy chủ, không có chi phí ảo hóa. Điều này có nghĩa là mọi thứ từ thời gian phản hồi của ứng dụng đến I/O tệp đều nhanh hơn đáng kể so với Docker. Thêm vào đó, trình cài đặt của ServBay cực kỳ nhẹ chỉ với 20MB.
  • Quản lý đa phiên bản linh hoạt: ServBay cho phép bạn chạy nhiều phiên bản của các ngôn ngữ và dịch vụ phát triển khác nhau—bao gồm nhưng không giới hạn ở Python, Rust, Java, PHP, Node.js và MySQL—đồng thời. Bạn thậm chí có thể gán các phiên bản cụ thể cho từng trang web của mình. Điều này cực kỳ hữu ích để duy trì nhiều dự án cũ.
  • Dễ sử dụng: Nó cung cấp một giao diện đồ họa sạch sẽ giúp các tác vụ như thêm trang web, cấu hình tên miền và kích hoạt SSL chỉ bằng một cú nhấp chuột trở nên cực kỳ đơn giản. Không cần phải chỉnh sửa các tệp cấu hình phức tạp theo cách thủ công.
  • Bộ công cụ hoàn chỉnh: Nó đi kèm với các công cụ phổ biến như Redis, Memcached, máy chủ DNS, local tunneling, và thậm chí cả Local AI được tích hợp sẵn, tất cả đều sẵn sàng để sử dụng.

Mô tả hình ảnh

Đối với đại đa số các kịch bản phát triển web, tốc độ và sự tiện lợi mà ServBay mang lại đã cho phép tôi cuối cùng nói lời tạm biệt với tiếng ồn của quạt và sự chờ đợi kéo dài đi kèm với Docker.

MAMP / XAMPP / WAMP

Đây là những công cụ môi trường tích hợp cổ điển mà nhiều nhà phát triển đã sử dụng khi họ mới học lập trình. Chúng đơn giản và có thể xử lý các nhu cầu phát triển cơ bản. Tuy nhiên, so với các giải pháp mới hơn, chúng có cảm giác hơi lỗi thời, đặc biệt là khi nói đến việc quản lý nhiều phiên bản, hiệu suất và khả năng mở rộng tính năng.

Vậy, bạn nên chọn như thế nào?

Ý tưởng ngừng sử dụng Docker không phải là một mệnh lệnh tuyệt đối mà là một lời nhắc nhở để đánh giá lại các công cụ của bạn. Lựa chọn đúng đắn phụ thuộc vào nhu cầu cụ thể của bạn.

  • Nếu quy trình làm việc của bạn gắn liền với Kubernetes hoặc bạn thường xuyên cần xây dựng hình ảnh cho các kiến trúc khác nhau, các công cụ container như Podman hoặc Rancher Desktop vẫn là lựa chọn tốt nhất của bạn.
  • Nếu bạn là người dùng macOS chỉ tìm kiếm một runtime container nhẹ, Colima rất đáng để thử.
  • Nhưng nếu bạn giống tôi, chủ yếu là một nhà phát triển web (đặc biệt là với PHP, Node.js, v.v.), người coi trọng tốc độ và sự đơn giản tối đa trong môi trường cục bộ của mình, tôi thực sự khuyên bạn nên thử một công cụ tích hợp như ServBay hoặc MAMP. Nó cho phép bạn tập trung năng lượng trở lại vào việc viết mã, chứ không phải vật lộn với công cụ của mình.

Lời kết

Một công cụ không tốt cũng không xấu; nó chỉ đơn giản là có phù hợp hay không. Docker chắc chắn là một công nghệ tuyệt vời đã thay đổi cách chúng ta vận chuyển và triển khai phần mềm. Nhưng trong bối cảnh cụ thể của phát triển cục bộ, nó có thể không còn là giải pháp tối ưu nữa. Mục tiêu của chúng ta là viết mã một cách hiệu quả và thú vị. Nếu một công cụ bắt đầu trở thành gánh nặng, đừng ngại tìm kiếm một giải pháp thay thế. Đối với tôi, việc chuyển từ Docker Desktop sang ServBay là một quyết định đúng đắn. Chiếc laptop của tôi đã trở lại yên tĩnh, và quy trình làm việc của tôi mượt mà hơn bao giờ hết.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí