Bạn có bao giờ ngồi trước màn hình, nhìn vào hàng tá container đang chạy và tự hỏi: "Mình đang dùng thứ này vì nó cần thiết hay chỉ vì mọi người đều dùng?"
Trước đây, mình từng là một tín đồ sùng kính của Docker. Cứ muốn deploy là kéo Dockerfile ra, build image, rồi chạy docker run -d -p 80:80 my-app. Mọi thứ trơn tru đến mức ảo. Nhưng rồi, khi hệ thống lớn lên, Docker Compose trở nên cồng kềnh, và lúc đó, cái tên Kubernetes (k8s) đã xuất hiện như một "quái vật" không thể tránh khỏi.
Mình nhớ cái cảm giác đau đầu khi setup một cluster Kubernetes đầu tiên. Cài K3s hay Minikube thì dễ, nhưng để hiểu rõ Pod, ReplicaSet, Deployment, Service, Ingress... thì đúng là một cơn ác mộng. Lúc đó mình mới nhận ra, k8s không phải là giải pháp cho mọi thứ. Nó giống như việc bạn dùng một chiếc xe tăng để đi chợ mua rau vậy. Quá sức, quá phức tạp cho những project nhỏ.
Và rồi, một ngày nọ, mình bắt gặp lại LXC (Linux Containers). Không phải Docker, mà là LXC thuần túy. Khi chạy thử lxc-create -t download -n my-container, mình mới thấy sự nhẹ nhàng đến lạ. Nó không đóng gói cả một hệ điều hành vào image nặng trịch như Docker, cũng không cần orchestration phức tạp như k8s. LXC chỉ đơn giản là tạo một "cái phòng" riêng trong cùng một kernel, chia sẻ tài nguyên nhưng cách biệt về file system và process.
Cái gì cũng có chỗ của nó. Docker tuyệt vời cho việc đóng gói ứng dụng (portability), giúp code chạy từ máy phát triển đến server sản xuất mà không lỗi. Kubernetes thì là vua khi bạn cần quản lý hàng trăm, nghìn microservices cần tự động scaling và self-healing. Nhưng nếu bạn chỉ cần chạy một web server đơn giản, một database, hay một tool nhỏ để tự động hóa tác vụ? Thì LXC (hoặc thậm chí là LXD - lớp quản lý hiện đại hơn của LXC) lại là một lựa chọn cực kỳ "ngon" và hiệu quả.
Thật ra, ranh giới giữa các công nghệ này cũng mờ nhạt dần. Docker hiện tại cũng dựa trên cgroups và namespaces, vốn là "xương sống" của LXC. Nhưng tư duy của chúng khác nhau. Docker nghĩ về "ứng dụng", còn LXC nghĩ về "hệ điều hành" (nhưng là hệ điều hành chia sẻ kernel).
Mình vẫn dùng Docker cho dự án chính, vẫn đau đầu với k8s khi cần, nhưng giờ trong máy local để test các môi trường khác nhau, mình lại quay lại LXC. Nó nhanh, nhẹ, và cảm giác như đang "chạm" trực tiếp vào Linux hơn. Đừng bao giờ để xu hướng công nghệ chi phối hết tư duy của bạn. Hãy hỏi: "Mình cần gì?" trước khi quyết định "Mình dùng cái gì".