Chạy container hệ thống với LXC/LXD trên VPS

Bạn đã quen với Docker cho ứng dụng, nhưng cần một môi trường giống máy ảo nhưng nhẹ hơn, để chạy cả một hệ điều hành khác trên cùng một VPS? LXC/LXD chính là giải pháp. Không giống Docker đóng gói từng ứng dụng, LXD cho phép bạn chạy các container hệ thống (system container), về cơ bản là một máy ảo nhẹ, dùng chung kernel với host, nhưng có init riêng, systemd riêng, và bạn có thể SSH vào như một VPS thật. Bài viết này sẽ hướng dẫn bạn cài đặt, cấu hình và quản lý LXC/LXD trên VPS Ubuntu 24.04, đồng thời chỉ ra những điểm mạnh, điểm yếu so với Docker và máy ảo truyền thống.
LXC/LXD là gì và khi nào nên dùng?
LXC (Linux Containers) là công nghệ ảo hóa cấp độ hệ điều hành, cho phép chạy nhiều hệ thống Linux biệt lập trên một kernel riêng biệt. LXD là trình quản lý container (daemon + CLI) hiện đại, cung cấp API, snapshot, live migration và bảo mật tốt hơn LXC thuần. Nói nôm na, LXD là "Docker cho hệ điều hành".
Bạn nên dùng LXD khi:
- Cần môi trường giống máy ảo nhưng tiết kiệm RAM và CPU hơn KVM/QEMU. Một container LXD có thể chạy Ubuntu, Debian, Alpine, Fedora... với systemd riêng.
- Phân chia tài nguyên VPS cho nhiều dự án. Ví dụ: một container cho WordPress, một container cho GitLab, một container cho n8n, mỗi container có IP riêng, không ảnh hưởng lẫn nhau.
- Phát triển và kiểm thử hạ tầng: tạo snapshot trước khi nâng cấp, rollback trong tích tắc.
- Chạy ứng dụng cần systemd hoặc các dịch vụ hệ thống mà Docker không hỗ trợ tốt (như Postfix, systemd-timedated, hay cần SSH vào container thật sự).
So với Docker, LXD không dùng image layer nhỏ (thường image cả OS ~100-200MB cho Alpine, 300-400MB cho Ubuntu), và việc quản lý network phức tạp hơn nếu không cẩn thận. Bù lại, bạn có một môi trường "VPS trong VPS" cực kỳ linh hoạt.
Yêu cầu trước khi bắt đầu
- Một VPS chạy Ubuntu 24.04 LTS (cũng chạy tốt trên Debian 13, AlmaLinux 9). Bạn có thể thuê VPS Linux tại các nhà cung cấp như thueVPS với NVMe và IPv4 riêng.
- Quyền sudo hoặc root.
- Kernel Linux hỗ trợ cgroups và namespace (mọi kernel >= 4.x đều có).
- Ít nhất 2 GB RAM và 10 GB disk trống (tuỳ số container). Nếu bạn có gói VPS giá rẻ 2GB RAM, vẫn có thể chạy 2-3 container Ubuntu nhẹ.
Bước 1 - Cài đặt LXD trên Ubuntu 24.04
Ubuntu 24.04 đi kèm gói lxd trong repository chính thức, phiên bản 5.0 LTS (hỗ trợ đến tháng 6/2027). Cài đặt rất đơn giản:
sudo apt update
sudo apt install lxd -y
Kiểm tra phiên bản sau khi cài:
lxd --version
Output mong đợi: 5.0.x (hoặc 6.x nếu bạn dùng snap track feature). Nếu bạn muốn bản mới hơn (6.x feature track), bạn có thể cài qua snap: sudo snap install lxd --channel=6.0/stable. Tuy nhiên, bài này sẽ dùng bản apt để ổn định.
Quan trọng: Thêm user của bạn vào group lxd để chạy lệnh không cần sudo:
sudo usermod -aG lxd $USER
newgrp lxd
Bước này cần logout/login lại terminal để có hiệu lực hoàn toàn.
Bước 2 - Khởi tạo và cấu hình LXD lần đầu
Chạy lệnh khởi tạo LXD. Nó sẽ hỏi bạn một vài câu hỏi; nếu bạn không chắc, cứ chọn mặc định (Enter), phù hợp với VPS cá nhân.
sudo lxd init
Một vài lựa chọn quan trọng:
- Storage pool: Nên dùng
dir(thư mục) hoặczfs. ZFS có snapshot và nén tốt hơn, nhưng yêu cầu disk và RAM thêm. Với VPS 2-4GB RAM, tôi khuyên dùngdircho đơn giản. - Network bridge: LXD sẽ tạo bridge
lxdbr0và cấp NAT cho container. Chọn dải IP mặc định (10.x.x.x). - IPv6: Có thể tắt nếu không dùng.
Sau khi init xong, kiểm tra trạng thái:
lxc list
Output: +------+-------+------+------+------+-----------+ (danh sách rỗng).
Không có lỗi là mọi thứ đã sẵn sàng.
Bước 3 - Tạo và chạy container đầu tiên
Lệnh để tạo một container Ubuntu 24.04 rất đơn giản:
lxc launch ubuntu:24.04 my-first-container
LXD sẽ tự động tải image (khoảng 300-400 MB) và khởi động container. Xem danh sách container:
lxc list
Output sẽ hiện tên, trạng thái, IPv4 (nếu có). Bây giờ bạn có thể truy cập vào container như SSH vào một máy khác:
lxc exec my-first-container -- bash
Bạn sẽ ở trong môi trường Ubuntu 24.04 hoàn chỉnh, với systemd, apt, và có thể cài bất cứ thứ gì. Chạy thử:
cat /etc/os-release
systemctl status systemd-journald
Bạn sẽ thấy mọi thứ hoạt động như một VPS thật. Thoát bằng lệnh exit.
Mẹo: Bạn cũng có thể launch các bản phân phối khác như Debian 13, Alpine, Fedora... Xem danh sách image:
lxc image list ubuntu: | head -20
Bước 4 - Quản lý tài nguyên và snapshot
Một trong những sức mạnh của LXD là giới hạn tài nguyên cho từng container. Ví dụ, giới hạn container này chỉ dùng 1 CPU core, 512MB RAM và 5GB disk:
lxc config set my-first-container limits.cpu 1
lxc config set my-first-container limits.memory 512MB
lxc config set my-first-container limits.disk 5GB
Áp dụng ngay, không cần restart (trừ khi đã dùng hết RAM, container sẽ bị kill). Đây là điểm khác biệt so với máy ảo: thay đổi tài nguyên là tức thời, linh hoạt.
Snapshot là tính năng thiết yếu. Trước khi thực hiện thay đổi mạo hiểm (nâng cấp gói, thay config), hãy snapshot:
lxc snapshot my-first-container pre-upgrade-snap
Nếu mọi thứ hỏng, chỉ cần khôi phục lại:
lxc restore my-first-container pre-upgrade-snap
Snapshot LXD rất nhanh (vài giây) và chỉ chiếm dung lượng phần dữ liệu thay đổi (nếu dùng ZFS hoặc btrfs). Với storage dir, snapshot là bản copy đầy đủ, tốn thêm dung lượng nhưng vẫn rẻ hơn máy ảo KVM.
Bước 5 - Network: NAT, bridge và cấp IP cho container
Theo mặc định, LXD tạo bridge lxdbr0 với NAT, container có IP nội bộ (10.x.x.x) và ra internet được. Để container có thể truy cập từ bên ngoài (ví dụ chạy web server), bạn cần forward port từ host vào container.
Trước tiên, thêm một proxy device để forward port 8080 của host vào port 80 của container:
lxc config device add my-first-container myproxy proxy listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:80
Giờ nếu bạn cài Nginx trong container (lệnh: lxc exec my-first-container -- apt install nginx -y), thì truy cập http://<host-ip>:8080 sẽ đến nginx trong container.
Nếu bạn muốn container có IP public riêng (thường cần 1 IPv4 phụ từ nhà cung cấp VPS), bạn có thể cấu hình macvlan hoặc bridge vật lý với IP public. Bước này phức tạp hơn, phù hợp với bài viết riêng. Với hầu hết trường hợp, NAT + proxy là đủ.
Xử lý lỗi thường gặp
- Lỗi "Error: Failed to connect to local LXD": Do chưa khởi tạo LXD hoặc daemon chưa chạy. Chạy
sudo lxd initvàsudo systemctl start lxd. - Container không có network: Kiểm tra bridge bằng
lxc network list. Nếu bridge bị thiếu, tạo lại:lxc network create lxdbr0. - Không thể launch image: Do image server không truy cập được hoặc hết dung lượng. Kiểm tra với
lxc image list ubuntu:24.04vàdf -h. - Lỗi kernel cgroups: Trên một số VPS, kernel có thể thiếu module. Cài gói
linux-modules-extra-xxxhoặc nâng cấp kernel lên bản HWE.
Câu hỏi thường gặp
LXC/LXD khác Docker thế nào?
Docker tập trung vào chạy ứng dụng (application container), dùng image nhỏ, không có init riêng, không có systemd. LXD chạy toàn bộ hệ điều hành (system container), có init, systemd, SSH, giống máy ảo nhưng nhẹ hơn nhiều. Bạn chọn Docker nếu chỉ cần chạy app; chọn LXD nếu cần cả OS.
Có thể chạy Windows container trên LXD không?
Không, LXD chỉ hỗ trợ Linux container vì dùng chung kernel Linux. Muốn chạy Windows, bạn phải dùng KVM hoặc máy ảo thật.
Chạy LXD trên VPS 2GB RAM có ổn không?
Được, miễn là bạn giới hạn RAM container. Một container Ubuntu 24.04 nhẹ, không GUI, tiêu tốn ~200-300MB RAM (bao gồm systemd và các service nền). Bạn có thể chạy 3-4 container trên VPS 2GB RAM. Nếu cần nhiều hơn, nâng cấp lên VPS 4GB RAM hoặc cao hơn.
Làm sao để backup toàn bộ LXD container?
Dùng lệnh lxc export <container-name> /backup/my-container.tar.gz để export ra file tar. Hoặc snapshot rồi dùng rsync thư mục snapshot lên storage ngoài. LXD cũng hỗ trợ incremental backup tự động qua script.
Có thể dùng LXD trên VPS của thueVPS không?
Có. LXD chạy trên mọi VPS Linux KVM với kernel tiêu chuẩn. Bạn có thể thuê VPS Linux tại thueVPS (Ubuntu 24.04, Debian 13, AlmaLinux 9) và cài LXD ngay. Các gói VPS NVMe có snapshot sẵn trên host để backup toàn bộ container.
Bài viết liên quan
- Cách cài Docker trên VPS Ubuntu chi tiết từ A đến Z
- Chạy nhiều site trên 1 VPS với Docker và Nginx proxy
- Ảo hóa Proxmox trên VPS và máy chủ riêng


