Vài tuần trước, tôi đã chuyển từ Docker sang Podman để tận dụng các tính năng nâng cao cho nhu cầu container hóa của mình. Mặc dù vậy, Docker vẫn là một nền tảng container mạnh mẽ và tôi sẽ giới thiệu nó cho bất kỳ ai muốn tìm hiểu sâu về container. Trên thực tế, tôi vẫn dành riêng một máy ảo Proxmox để cài Docker, chỉ để vọc vạch trong thời gian rảnh. Nhưng giờ đây, khi tôi bắt đầu biến những chiếc laptop cũ thành các node Proxmox VE (PVE), tôi đã trang bị cho mỗi chiếc một Docker LXC. Nghe có vẻ lạ lùng khi chạy Docker bên trong một container thay vì máy ảo, nhưng cấu hình “kỳ quặc” này lại mang đến những lợi thế đáng kể.
Tại Sao Nên Chạy Docker Trong LXC Trên Proxmox?
Ưu Điểm Vượt Trội Cho Thiết Bị Cấu Hình Yếu
Khi tôi bắt đầu hành trình hồi sinh các phần cứng lỗi thời và máy tính cấu hình thấp thành các máy chủ Proxmox, nguồn tài nguyên hạn chế của chúng nhanh chóng trở thành một nút thắt cổ chai lớn. Việc chạy nhiều hơn vài máy ảo (và trong một số trường hợp, chỉ hơn một máy ảo) là gần như không thể trên các hệ thống ngốn CPU và RAM của tôi. Đây là một vấn đề lớn, bởi tôi chạy nhiều ứng dụng tự lưu trữ (self-hosted applications) cùng với các thử nghiệm máy ảo, và việc triển khai Docker bên trong một máy ảo riêng sẽ tiêu tốn quá nhiều tài nguyên trên chiếc máy tính “đói” của tôi.
Hóa ra, các container LXC là một giải pháp thay thế hoàn hảo cho vấn đề hiệu suất. Chắc chắn, container có thể không mang lại lợi thế bảo mật tương tự như máy ảo, nhưng LXC nhẹ hơn rất nhiều, khiến chúng phù hợp hơn cho các hệ thống cũ. Để dễ hình dung, chiếc laptop giá rẻ hơn một thập kỷ tuổi của tôi hầu như không thể chạy một máy ảo có giao diện đồ họa, nhưng nó có thể cung cấp năng lượng cho hàng chục container một cách mượt mà. Do đó, một thiết lập Docker dựa trên LXC là lý tưởng cho các thiết bị công suất thấp của tôi, đặc biệt là trong những dàn máy mà tôi muốn giữ mức sử dụng tài nguyên ở mức tối thiểu tuyệt đối.
Giao diện Portainer hiển thị danh sách các image Docker trong LXC Proxmox
Hướng Dẫn Triển Khai Docker Trong LXC Trên Proxmox
Phương Pháp Dễ Dàng: Sử Dụng Script Hỗ Trợ Proxmox VE Helper-Scripts
Cũng như mọi dự án homelab khác, có nhiều hơn một phương pháp để tạo một LXC dựa trên Docker trên Proxmox. Cách dễ dàng hơn là sử dụng kho lưu trữ Proxmox VE Helper-Scripts – hay cụ thể hơn là script Docker – để khởi tạo một LXC dành riêng cho môi trường container. Chạy script này đơn giản như việc thực thi lệnh bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/docker.sh)"
bên trong tab Shell của máy chủ Proxmox của bạn. Tuy nhiên, tôi khuyên bạn nên cấu hình LXC thủ công bằng cách chọn Advanced options.
Việc chọn Default options sẽ cấp phát 2 v-core, 2GB bộ nhớ và 4GB lưu trữ cho LXC. Tùy thuộc vào khối lượng công việc của bạn, bạn sẽ nhanh chóng nhận thấy tài nguyên hệ thống, đặc biệt là dung lượng đĩa, bị cạn kiệt. Vì vậy, tốt hơn hết là bạn nên sửa đổi tài nguyên được gán cho LXC của mình. Ngoài ra còn có lựa chọn giữa container privileged và unprivileged, mà tôi sẽ đề cập sau. Tôi cũng khuyến nghị bật Portainer trong quá trình thiết lập LXC, vì nó giúp việc quản lý container trở nên cực kỳ dễ dàng.
Phương Pháp Thủ Công: Xây Dựng LXC Từ Đầu
Nếu bạn muốn có trải nghiệm tùy chỉnh hơn, bạn có thể tự xây dựng Docker LXC từ đầu. Tôi thường thích sử dụng template Debian TurnKey, nhưng bạn cũng có thể tìm thấy các gói Ubuntu, Alpine, Fedora, Arch Linux và các gói tzst
khác trong tab CT Templates bên trong ổ đĩa local. Khi bạn tạo một container thông qua trình hướng dẫn tạo LXC, hãy nhớ gán DHCP (hoặc một IP tĩnh, nếu bạn muốn) cho nó.
Sau khi node Proxmox của bạn đã triển khai LXC, bạn có thể thực thi lệnh apt update && apt upgrade -y
trước khi cài đặt tiện ích curl bằng cách chạy apt install curl -y
trong tab Console. Để thiết lập Docker, chỉ cần dán đoạn mã sau vào terminal và chờ script cài đặt môi trường container cùng các gói cần thiết:
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
LXC Privileged so với Unprivileged: Lựa Chọn Quan Trọng Về Bảo Mật
Bất kể phương pháp bạn đã sử dụng để triển khai LXC, bạn sẽ phải quyết định xem đó là một container privileged hay unprivileged. Lựa chọn sau an toàn hơn, vì UID 0 (root) của container được ánh xạ tới một người dùng không có đặc quyền trên node PVE. Bằng cách đó, bạn sẽ không phải lo lắng về việc leo thang đặc quyền.
Màn hình cấu hình tạo LXC Docker privileged trên Proxmox
Thật không may, việc thiết lập các chia sẻ mạng bên trong các LXC unprivileged có thể gặp một chút vấn đề. Nếu bạn đang có kế hoạch kết nối các ổ đĩa CIFS/NFS với Docker LXC của mình, bạn có thể muốn chọn một container privileged. Nhưng vì các LXC này ánh xạ UID 0 của container tới UID 0 của máy chủ Proxmox, bạn sẽ phải đối mặt với rủi ro bảo mật cao hơn.
Những Hạn Chế Cần Lưu Ý Khi Dùng Docker Trong LXC
Không Tối Ưu Cho Máy Chủ Cấu Hình Mạnh
Mặc dù cấu hình Docker dựa trên LXC là tốt cho các hệ thống chịu gánh nặng của máy ảo, nhưng thiết lập container-trong-container này cũng có những vấn đề riêng. Đầu tiên, các bản cập nhật Proxmox có thể làm hỏng các Docker LXC. Chúng cũng không an toàn như máy ảo, và mặc dù tôi chưa gặp phải các vấn đề ổn định, tôi đã nghe rất nhiều câu chuyện kinh hoàng về việc các Docker LXC gặp sự cố bất ngờ.
Máy tính cũ đang chạy Proxmox, minh họa cho việc cân nhắc giữa LXC và VM
Vì vậy, nếu bạn đang sử dụng một máy chủ cao cấp, tốt hơn hết là nên chạy Docker bên trong một máy ảo. Nhưng đối với những người có thiết bị yếu, không có hại gì khi duy trì thiết lập dựa trên LXC.
Kết Luận
Việc chạy Docker trong một container LXC trên Proxmox mang lại lợi ích đáng kể về hiệu quả sử dụng tài nguyên, đặc biệt là đối với các thiết bị cấu hình cũ trong môi trường homelab. Mặc dù phương pháp này có thể giúp bạn hồi sinh phần cứng cũ và tối ưu hóa chi phí, bạn cần cân nhắc kỹ lưỡng giữa sự tiện lợi và các rủi ro tiềm ẩn về bảo mật cũng như ổn định, đặc biệt là khi quản lý các container privileged hoặc sau các bản cập nhật Proxmox.
Nếu bạn đang sở hữu một server mạnh, việc sử dụng máy ảo cho Docker vẫn là lựa chọn an toàn và ổn định hơn. Tuy nhiên, với những người dùng có nhu cầu tối ưu tài nguyên tối đa trên các thiết bị yếu, Docker LXC là một giải pháp đáng cân nhắc. Bạn đã thử thiết lập này chưa? Hãy chia sẻ kinh nghiệm của bạn trong phần bình luận bên dưới hoặc tìm đọc thêm các bài viết chuyên sâu khác về Proxmox và container trên congnghemoi.net!