Chuyện muôn thuở: Dựng môi trường test cục bộ tốn quá nhiều thời gian
Hồi mới đi làm, mỗi lần cần dựng cụm test—như chạy thử Docker Swarm 2 node hay tái hiện bug chỉ dính trên Ubuntu Server—mình thường bay nguyên buổi sáng. Cài trực tiếp lên máy dev thì sợ rác OS và xung đột phiên bản runtime. Tải file ISO 2.6GB về máy rồi mở VirtualBox bấm chuột mỏi tay: chỉnh RAM, gắn card mạng Bridge, gõ username, mật khẩu. Làm đi làm lại vài ba máy là hết pin cả người lẫn laptop.
Ở nhà mình có dàn homelab chạy Proxmox với hơn chục VM. Dù vậy, không phải lúc nào mình cũng ngồi ôm server hay có mạng ổn định để VPN về. Ra quán cà phê mở laptop lên, cái mình cần chỉ là một chiếc Ubuntu sạch để thử nhanh đoạn script shell trong 10 phút rồi xoá không dấu vết.
Các giải pháp quen thuộc đang vướng ở đâu?
Tại sao việc kiếm một OS biệt lập trên máy cá nhân lại hay gặp phiền toái? Điểm qua các công cụ quen thuộc:
- VirtualBox / VMware Workstation: Giao diện đồ họa ăn nhiều RAM (thường ngốn tối thiểu 1.5–2GB RAM nền). Thao tác chuột thủ công, khó viết script để tự động hóa khi cần spin-up nhiều node.
- Vagrant: Tự động hóa tốt nhưng file
Vagrantfilerườm rà. Tốc độ kéo box lần đầu khá chậm và hay lỗi mạng bridge khi VirtualBox nâng cấp bản mới. - WSL2 trên Windows: Rất tiện để gõ lệnh hàng ngày. Tuy nhiên, WSL2 chia sẻ chung kernel và network namespace với Windows qua NAT ngầm. Khi cần test cấu hình systemd sâu, dựng tường lửa UFW/iptables độc lập hay gán dải IP riêng cho từng node, bạn sẽ gặp nhiều giới hạn khó chịu.
- Docker: Container dùng chung kernel với máy host. Docker không thể thay thế máy ảo nếu bạn cần test kernel module, chạy systemd init từ đầu hoặc giả lập môi trường mạng cô lập hoàn toàn.
Multipass: Máy ảo Ubuntu thu nhỏ của Canonical
Multipass do chính Canonical (công ty mẹ của Ubuntu) phát triển. Thay vì bắt bạn tự cài đặt qua ISO, công cụ này kéo thẳng Ubuntu Cloud Image chính chủ cực nhẹ. Multipass tận dụng hypervisor có sẵn của hệ điều hành: KVM trên Linux, Hyper-V trên Windows và Hypervisor.framework trên macOS. Nhờ đó, máy ảo khởi động và cấp phát IP chỉ mất khoảng 15 đến 20 giây.
1. Cài đặt Multipass
Trên Linux (Ubuntu, Debian, Fedora, Arch)
Multipass được đóng gói sẵn qua Snap. Mở terminal và chạy hai lệnh sau:
sudo snap install multipass
multipass version
Trên Windows 10/11
Cách nhanh nhất là dùng WinGet trong PowerShell (chạy quyền Administrator):
winget install Canonical.Multipass
Multipass mặc định dùng Hyper-V (yêu cầu Windows bản Pro hoặc Enterprise). Nếu đang dùng Windows Home, bạn có thể chuyển driver nền tảng sang VirtualBox bằng lệnh multipass set local.driver=virtualbox.
2. Khởi tạo máy ảo đầu tiên
Không cần mở bất kỳ cửa sổ GUI nào. Toàn bộ thao tác gói gọn trong terminal.
Tạo máy ảo với cấu hình tuỳ chọn
Để tạo máy ảo chạy Ubuntu LTS mới nhất tên là dev-box, cấp 2 core CPU, 2GB RAM và 10GB ổ cứng:
multipass launch --name dev-box --cpus 2 --memory 2G --disk 10G
Nếu cần chỉ định phiên bản cụ thể (ví dụ 22.04 thay vì bản mới nhất):
multipass launch 22.04 --name worker-node --cpus 1 --memory 1G --disk 8G
Kiểm tra danh sách và IP
multipass list
Terminal sẽ trả về trạng thái kèm địa chỉ IPv4 nội bộ:
Name State IPv4 Image
dev-box Running 10.147.214.45 Ubuntu 24.04 LTS
worker-node Running 10.147.214.88 Ubuntu 22.04 LTS
3. Thao tác bên trong máy ảo
Vào thẳng shell không cần setup SSH key
Multipass tự map phiên làm việc vào tài khoản ubuntu sẵn quyền sudo:
multipass shell dev-box
Khi muốn quay lại máy host, bạn chỉ cần gõ exit.
Chạy lệnh từ xa mà không cần SSH
Nếu bạn chỉ muốn cài gấp một package hoặc check port từ máy host, dùng cờ exec:
multipass exec dev-box -- sudo apt update && sudo apt install -y nginx
multipass exec dev-box -- curl -I http://localhost
4. Mount thư mục code giữa máy host và VM
Bạn có thể mở VS Code trên máy host để gõ code, rồi mount trực tiếp thư mục đó vào trong máy ảo để chạy runtime:
# Cú pháp: multipass mount <path-máy-host> <tên-vm>:<path-trong-vm>
mkdir -p ~/my-project
multipass mount ~/my-project dev-box:/home/ubuntu/project
Mọi chỉnh sửa file ở ~/my-project lập tức phản chiếu vào /home/ubuntu/project bên trong VM mà không cần dùng lệnh scp hay rsync.
5. Lưu trạng thái với Snapshot
Trước khi chạy thử script cài đặt phức tạp hoặc can thiệp sâu vào file cấu hình hệ thống, hãy chụp một snapshot để đề phòng lỗi:
# Tạo bản lưu trạng thái
multipass snapshot dev-box --name clean-state
# Khôi phục lại trạng thái cũ chỉ sau vài giây
multipass restore dev-box.clean-state
6. Dọn dẹp tài nguyên sau khi test xong
Khi hoàn thành công việc, bạn giải phóng ổ cứng và RAM chỉ với ba lệnh:
# Tạm dừng máy ảo khi nghỉ trưa để tiết kiệm RAM
multipass stop dev-box
# Đưa máy ảo vào hàng đợi xoá
multipass delete dev-box
# Xoá triệt để dữ liệu đĩa cứng
multipass purge
Tóm lại
Thay vì mất 30 phút vật lộn với file ISO hay cấu hình mạng, Multipass rút gọn luồng làm việc xuống đúng 4 thao tác: launch để lấy môi trường sạch, mount để đưa code vào, shell để chạy thử, và purge để dọn dẹp. Đây là công cụ cực kỳ đáng có trong terminal của bất kỳ lập trình viên hay kỹ sư DevOps nào cần môi trường Linux biệt lập, nhanh và nhẹ.
