- Published on
Why You Need To Start Using Lima VM on Linux
- Authors

- Name
- Rakesh Tembhurne
- @tembhurnerakesh
Why Traditional Virtualization on Linux Falls Short
Are you tired of the overhead when testing different Linux distributions or setting up isolated development environments on your Ubuntu machine? Traditional virtualization solutions often suffer from:
- Resource overhead - VirtualBox and VMware consume significant RAM and CPU
- Complex configuration - Manual setup for networking, file sharing, and port forwarding
- Poor developer experience - GUI-heavy interfaces and slow startup times
- Disk space waste - Large VM images taking up precious storage
Lima was created to solve these problems with a developer-centric approach that prioritizes speed and minimal resource consumption - perfect for Ubuntu and Linux developers.
What is Lima?
Lima is a powerful, lightweight, and open-source solution that simplifies running Linux VMs directly on your Linux host (Ubuntu, Fedora, Arch, etc.). It automatically handles tedious setup tasks like networking, file sharing, and port forwarding, providing a seamless multi-distro testing environment.
Key Features
- Lightweight and Fast - Resource-efficient VMs with automatic configuration
- Automatic File Sharing - Your home directory is mounted directly in the VM
- Port Forwarding - Seamless network access between host and VM
- Multi-Distro Support - Test Fedora, Alpine, Arch, openSUSE without rebooting
- Container-Ready - Built-in support for Docker, Containerd, and Podman
- Kubernetes Support - Run local K8s clusters with minimal setup
- Template System - Pre-configured VMs for different use cases
- Developer-Focused - Simple CLI interface, no complex GUIs
Why Lima on Ubuntu/Linux?
While Ubuntu developers already have native Linux access, Lima provides unique benefits:
- Cross-Distro Testing - Test your app on Fedora, Alpine, Arch without dual-boot
- Isolated Environments - Keep experimental setups separate from your main system
- Different Kernel Versions - Test against older/newer kernels easily
- Container Development - Isolated Docker/Podman environments per project
- CI/CD Simulation - Match production environments locally
Getting Started in Minutes
Installation on Ubuntu/Debian
# Install QEMU (Lima's backend)
sudo apt update
sudo apt install qemu-system qemu-utils
# Download and install Lima
VERSION=$(curl -fsSL https://api.github.com/repos/lima-vm/lima/releases/latest | grep tag_name | cut -d '"' -f 4)
wget https://github.com/lima-vm/lima/releases/download/${VERSION}/lima-${VERSION:1}-Linux-x86_64.tar.gz
tar -xzf lima-${VERSION:1}-Linux-x86_64.tar.gz
sudo mv bin/* /usr/local/bin/
Installation on Other Linux Distros
Fedora/RHEL:
sudo dnf install qemu-system-x86 qemu-img
# Then install Lima from GitHub releases as shown above
Arch Linux:
sudo pacman -S qemu-base
# Then install Lima from GitHub releases as shown above
Launch Your First VM
Lima uses templates to define VM configurations. The default template provides Ubuntu with Containerd:
limactl start
Lima automatically downloads the base image, configures the hypervisor, and sets up all connections.
Access the VM Shell
limactl shell default
Your home directory is automatically mounted, making project files instantly accessible.
Real-World Use Cases on Ubuntu
Testing Different Distributions
# Test on Fedora
limactl start template://fedora
# Test on Alpine (minimal)
limactl start template://alpine
# Test on Arch Linux
limactl start template://archlinux
Isolated Container Environments
Create separate Docker environments per project:
# Project A with Docker
limactl start --name=project-a template://docker
# Project B with Podman
limactl start --name=project-b template://podman
Next.js/Node.js Development Workflow
Test your Next.js application in an isolated environment before deploying:
# Create a Lima VM for Next.js development
limactl start --name=nextjs-dev template://docker
# Access the VM
limactl shell nextjs-dev
cd ~/your-nextjs-project
# Development workflow
npm install
npm run dev
# Build and test production Docker image
docker build -t my-nextjs-app .
docker run -p 3000:3000 my-nextjs-app
Access your Next.js app at http://localhost:3000 from your Ubuntu host while it runs in an isolated Lima VM.
Container Workflows
Lima excels at integrating with modern container tooling.
Using Containerd/nerdctl
The default template includes nerdctl. Run containers by prefixing commands with .lima:
nerdctl.lima run -d --name nginx -p 127.0.0.1:8080:80 nginx:alpine
Access the service at http://localhost:8080 - the container runs inside the VM but is accessible from your host.
Integrating with Docker
Point your local Docker CLI to the Lima VM:
limactl start template://docker
export DOCKER_HOST=$(limactl list docker --format 'unix://{{.Dir}}/sock/docker.sock')
docker run -d --name nginx -p 127.0.0.1:8080:80 nginx:alpine
All docker commands now execute inside the Lima VM with isolated environment.
Kubernetes on Ubuntu
Lima's k8s template sets up a minimal, ready-to-go Kubernetes environment:
limactl start template://k8s
export KUBECONFIG=$(limactl list k8s --format 'unix://{{.Dir}}/copied-from-guest/kubeconfig.yaml')
kubectl apply -f your-pod.yaml
Manage Pods and Deployments directly from your Ubuntu laptop without cloud infrastructure.
Advanced Configuration
Customize your VMs with advanced options:
Resource Allocation
limactl start --cpus=4 --memory=8 --name=dev-vm
Writable Home Directory
limactl start --mount-writable --name=build-vm
Network Configuration
limactl start --network=lima:shared --name=network-vm
VM Management
limactl ls # List all VMs
limactl stop <vm-name> # Stop a VM
limactl delete <vm-name> # Delete a VM
limactl prune # Remove unused cache files
Custom Templates
Lima templates are located in ~/.lima or /usr/share/lima/templates/. Available templates:
- Fedora - Latest Fedora release
- Alpine - Minimal lightweight distro
- Arch Linux - Rolling release testing
- openSUSE - SUSE-based environments
- Kubernetes (K3s) - Lightweight K8s
Creating Custom Templates
Create a custom YAML template for your specific needs:
# ~/.lima/custom-ubuntu.yaml
images:
- location: 'https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.img'
cpus: 4
memory: '8GiB'
mounts:
- location: '~'
writable: true
Start with your custom template:
limactl start --name=custom ~/.lima/custom-ubuntu.yaml
Why Lima is a Game-Changer for Linux Developers
Lima provides a production-ready, open-source way to manage lightweight Linux VMs on Ubuntu/Linux, handling the complexity of networking and security so developers can focus on building software. Whether you're testing across different Linux distributions, running isolated containers, or managing local Kubernetes clusters, Lima offers:
- Speed - Lightweight VMs that start in seconds
- Simplicity - Automatic configuration with sensible defaults
- Flexibility - Test any Linux distro without dual-boot or repartitioning
- Isolation - Keep experimental setups separate from your main system
- Performance - Native KVM/QEMU execution with minimal overhead
Stop wrestling with heavyweight virtualization tools like VirtualBox. Start using Lima for efficient multi-distro development on Ubuntu.
Related Posts
Modern ways of deployment with Docker
Multipple ways of deploying applications using Docker containers.
Setting up Servers with Bash Scripts
Let's build different bash scripts to setup Ubuntu servers for development.