Colima vs Multipass
vs OrbStack & Friends
Running Linux containers and VMs on macOS is more nuanced than it looks — macOS doesn't have a native Linux kernel, so every approach virtualizes one. This guide maps the full landscape: what each tool is, how it works, and when to pick it.
The macOS Container Problem
On Linux, Docker runs natively — containers share the host kernel. On macOS, there is no Linux kernel, so every container/VM tool must secretly run a Linux VM under the hood. The difference is in what VM technology is used, how well the VM is hidden from you, and what features sit on top.
All tools use either Apple's Hypervisor.framework (fast, no root, macOS 11+) or QEMU (older, slower, cross-platform). The networking, file sharing, and binary compatibility layers on top are where the tools diverge.
Tool Categories at a Glance
These tools serve different primary jobs. Understanding the category prevents apples-to-oranges comparisons.
The base that Colima, Rancher, and others are built on. Most users use it indirectly.
Minimal CLI tool. Wraps Lima + installs Docker/containerd inside. Drop-in replacement for Docker Desktop.
Native macOS app with custom kernel integration. The fastest option. Has a built-in Docker replacement + lightweight Linux VMs.
From Canonical (Ubuntu). Focused on spinning up Ubuntu VMs quickly. Not primarily a container tool.
GUI app with Docker CLI + built-in k3s Kubernetes. Great for k8s devs.
The most used. Heavy GUI app. Requires paid subscription for commercial use at scale.
Architecture Comparison
All tools run a Linux VM on macOS. The difference is the hypervisor, the VM config, and how Docker/containerd is surfaced to you.
| Tool | Hypervisor | VM OS | Container Runtime | GUI |
|---|---|---|---|---|
| Lima | Hypervisor.framework / QEMU / VZ | Alpine / Ubuntu / Fedora… | Any (DIY) | CLI only |
| Colima | Hypervisor.framework (VZ) / QEMU | Alpine Linux (minimal) | Docker or containerd+nerdctl | CLI only |
| OrbStack | Custom (Apple Hypervisor + kernel ext) | Custom minimal Linux | Docker-compatible daemon | Native macOS app |
| Multipass | HVF (macOS) / Hyper-V (Win) / KVM (Linux) | Ubuntu LTS | N/A (general VM) | System tray |
| Rancher Desktop | QEMU / Apple VZ | Custom alpine | Docker or containerd+nerdctl | Electron app |
| Docker Desktop | Apple Hypervisor.framework | LinuxKit (custom) | Docker Engine | Native macOS app |
--vm-type vz uses Apple's
Virtualization.framework (macOS 13+) — faster, better file sharing, native Rosetta.
--vm-type qemu is the older default, works on macOS 12+.
Lima — Linux Machines
Lima is the foundation that Colima and Rancher Desktop are built on. Most users never interact with Lima directly — but understanding it demystifies the whole stack.
What Lima is
Lima (Linux Machines) is a CLI tool that launches Linux VMs on macOS via QEMU or Apple's Virtualization.framework. It handles:
- VM lifecycle (create, start, stop, delete)
- Automatic port forwarding (Linux ports → macOS ports)
- File sharing (read/write mount of
~into the VM) - SSH access to the VM
Lima template system
Lima uses YAML templates to define VMs. Colima is basically a wrapper that generates a Lima config for container workloads.
# install
brew install lima
# start default Ubuntu VM
limactl start
# shell into it
lima
# start with specific template (e.g. docker)
limactl start template://docker
# list running instances
limactl list
Colima
Colima is the most popular open-source alternative to Docker Desktop on macOS. It's a thin CLI wrapper around Lima that configures a VM with Docker or containerd installed, exposes the Docker socket, and handles port forwarding automatically.
Key facts
- Zero GUI — pure CLI, integrates with your existing Docker CLI
- Drop-in — set
DOCKER_HOSTand it just works with all Docker tooling - Two runtimes: Docker Engine or containerd + nerdctl
- Rosetta support:
--vm-type vz --vz-rosettaenables x86 images on Apple Silicon - Multi-instance: run multiple Colima VMs with different configs
Install & start
# install
brew install colima docker
# start with Docker runtime
colima start
# verify
docker ps
docker run hello-world
# start with containerd
colima start --runtime containerd
# use nerdctl instead of docker
brew install nerdctl
nerdctl run hello-world
VM configuration
colima start \
--cpu 4 \
--memory 8 \
--disk 60 \
--vm-type vz \ # Apple Virtualization.framework (macOS 13+, fast)
--vz-rosetta \ # run x86 images on Apple Silicon via Rosetta
--mount-type virtiofs # fastest file sharing mode
# named profile (for multiple instances)
colima start k8s-dev --with-kubernetes
colima start ci-runner --cpu 8 --memory 16
# check status
colima status
Kubernetes support
Colima has built-in k3s support — the lightest way to get a local k8s cluster:
colima start --with-kubernetes
# kubeconfig is set automatically
kubectl get nodes
Colima config file
cpu: 4
memory: 8
disk: 60
vmType: vz
rosetta: true
mountType: virtiofs
runtime: docker
kubernetes:
enabled: false
version: v1.28.0+k3s1
DOCKER_HOST=unix://$HOME/.colima/default/docker.sock to be explicit.
Strengths & weaknesses
- Completely free & open source
- Tiny footprint (Alpine VM)
- Works with all Docker tooling as-is
- Rosetta x86 emulation on M-series
- Multi-instance, multi-runtime
- Active community
- File sharing slower than OrbStack
- CLI only (no GUI)
- Manual config vs drag-and-drop
- VirtioFS requires macOS 13+
OrbStack
OrbStack is the fastest macOS container tool, built with a custom kernel integration that sidesteps most of the overhead of traditional virtualization. It's the closest thing to native Linux Docker on a Mac.
What makes it different
Instead of a general-purpose VM, OrbStack uses a purpose-built Linux kernel that integrates deeply with macOS. Key innovations:
- Rosetta integration — transparent x86/arm64 emulation
- Native file sharing — mounts appear nearly native speed (no FUSE overhead)
- Network routing — containers are directly accessible from macOS, no port-forward needed for most cases
- Low memory — uses far less RAM than Docker Desktop or a Colima VM
- Fast startup — sub-second container starts, ~2s full daemon start
Two modes in one
Drop-in replacement. Your existing docker compose files, Dockerfiles,
and Docker CLI commands work unchanged.
Spin up a full Ubuntu/Debian VM with one command. Like Multipass but faster and integrated into the same tool.
# install
brew install orbstack
# or download from orbstack.dev
# Docker works immediately after install
docker run hello-world
# Linux VMs
orb create ubuntu my-vm
orb shell ubuntu@my-vm
orb run ubuntu -- apt install nodejs
# list VMs
orb list
Pricing
Strengths & weaknesses
- Fastest file I/O of any option
- Lowest memory usage
- Beautiful native macOS GUI
- Docker + Linux VMs in one tool
- Sub-second container starts
- Direct network access (no port forward)
- Commercial (paid for business use)
- macOS only — no Windows/Linux parity
- Proprietary internals
- Less control over VM config
Multipass
Multipass is made by Canonical (the company behind Ubuntu). Its purpose is different from the others — it's an Ubuntu VM launcher, not a container tool. It's the right choice when you need a real Ubuntu environment, not just containers.
Key facts
- Always Ubuntu — each VM runs an Ubuntu LTS image (22.04, 24.04…)
- Cross-platform — macOS, Windows, Linux (uses native hypervisor on each)
- Cloud-init support — provision VMs with cloud-init YAML on first boot
- Not container-focused — you can install Docker inside the VM, but that's extra work
- snap package manager — you get Canonical's snap ecosystem inside
Quickstart
# install
brew install multipass
# launch a VM (downloads Ubuntu LTS)
multipass launch --name dev-box --cpus 4 --memory 8G --disk 40G
# shell into it
multipass shell dev-box
# run a command
multipass exec dev-box -- uname -a
# list VMs
multipass list
# transfer files
multipass transfer ./myfile.txt dev-box:/home/ubuntu/
# mount host directory into VM
multipass mount . dev-box:/home/ubuntu/project
# stop / delete
multipass stop dev-box
multipass delete dev-box && multipass purge
Cloud-init provisioning
Multipass accepts a cloud-init YAML file on launch, letting you provision VMs automatically:
package_update: true
packages:
- docker.io
- nodejs
- git
runcmd:
- usermod -aG docker ubuntu
- systemctl enable docker
multipass launch --cloud-init cloud-init.yaml --name my-dev
Strengths & weaknesses
- Full Ubuntu environment (apt, systemd, etc.)
- Cross-platform (Mac/Win/Linux)
- Cloud-init provisioning
- Good for testing infra/Ansible/Terraform locally
- Official Canonical support
- Heavier than container tools
- Ubuntu-only (no Fedora, Debian…)
- No native Docker integration
- Slower than OrbStack
- Not for container-first workflows
Rancher Desktop
Rancher Desktop is a free, open-source GUI app by SUSE that bundles Docker CLI + containerd + k3s Kubernetes in one package. It's the best choice if you want Kubernetes locally and don't want to configure it yourself.
What it includes
- Docker runtime or containerd + nerdctl (you choose)
- k3s — lightweight Kubernetes, installed and managed automatically
- Helm, kubectl pre-installed
- GUI — Electron app for managing VM resources and settings
# Docker works immediately
docker run hello-world
# Kubernetes is already configured
kubectl get nodes
kubectl get namespaces
# nerdctl (if you picked containerd runtime)
nerdctl run hello-world
Strengths & weaknesses
- Free & open source
- Kubernetes out of the box
- GUI for resource management
- Docker CLI compatible
- Cross-platform
- Electron app (heavy)
- Slower than Colima/OrbStack
- Not ideal if you don't need k8s
- Occasional stability issues
Docker Desktop
Docker Desktop is the most-used tool, and the one all others compare against. Worth understanding its trade-offs before switching away.
Why people use it
- Zero configuration — install and Docker works
- Best documentation and community support
- Official from Docker Inc.
- GUI with container/image management, volume inspector, log viewer
- Docker Extensions marketplace
Why people leave it
- Licensing — free for personal/education, but requires paid subscription for commercial use at companies with 250+ employees or $10M+ revenue
- Memory usage — reserves a large fixed VM memory allocation
- File sharing speed — historically slow on macOS (improved in recent versions with VirtioFS)
- Heavyweight — installs as a system daemon + tray app
Feature Matrix
| Feature | Lima | Colima | OrbStack | Multipass | Rancher | Docker Desktop |
|---|---|---|---|---|---|---|
| Docker-compatible | DIY | Yes | Yes | No | Yes | Yes |
| containerd support | DIY | Yes | No | No | Yes | No |
| Kubernetes built-in | No | k3s flag | No | No | Yes | Yes |
| Linux VMs (general) | Yes | Via Lima | Yes | Ubuntu only | No | No |
| GUI app | No | No | Yes | Tray only | Yes | Yes |
| Rosetta (x86 on M-chip) | With VZ | Yes (--vz-rosetta) | Auto | No | Limited | Yes |
| Multi-instance | Yes | Yes | Yes | Yes | No | No |
| Cost | Free | Free | Free personal | Free | Free | Free small co. |
| Cross-platform | macOS | macOS (Linux exp.) | macOS only | Mac/Win/Linux | Mac/Win/Linux | Mac/Win/Linux |
| virtiofs file sharing | Yes | Yes (VZ mode) | Custom (faster) | Limited | Yes | Yes |
Performance Comparison
Performance matters most for file-heavy workloads (node_modules in containers, webpack dev server, large builds). These are relative estimates — actual results depend on your machine and workload.
File I/O (bind mounts)
The biggest pain point for macOS container users — reading/writing files from a bind-mounted host directory.
% of native Linux file I/O speed (approximate)
Memory usage at idle
--vm-type vz --mount-type virtiofs is the
best open-source option.
File Sharing Modes
File sharing is the #1 pain point on macOS containers. When you bind-mount a directory
into a container (-v ./src:/app/src), the data must cross from macOS to the Linux VM.
The mechanism determines your I/O speed.
| Mode | How it works | Speed | Who uses it |
|---|---|---|---|
sshfs |
SSH tunnel + FUSE filesystem | Slow | Old Lima default |
9p |
Plan 9 protocol over virtio | Medium | QEMU-based tools |
virtiofs |
VirtIO shared filesystem (kernel-level) | Fast | Colima VZ, Docker Desktop, Rancher |
| OrbStack custom | macOS ↔ Linux shared memory ring buffer | Fastest | OrbStack only |
--mount-type virtiofs with Colima
(--vm-type vz required). This closes most of the gap with OrbStack for file I/O.
Avoiding bind mount overhead altogether
For the highest performance (e.g. node_modules), keep the files inside the container volume, not bind-mounted:
services:
app:
volumes:
- ./src:/app/src # source files (bind mount, ok)
- node_modules:/app/node_modules # named volume (stays in Linux!)
volumes:
node_modules: # Docker manages this, no macOS overhead
Quickstart for Each Tool
brew install colima docker docker-compose
colima start \
--vm-type vz \
--vz-rosetta \
--mount-type virtiofs
# verify
docker run --rm hello-world
docker compose version
brew install orbstack
# open OrbStack app → done
# Docker works immediately
docker run --rm hello-world
# Linux VM
orb create ubuntu dev
orb shell ubuntu@dev
brew install multipass
multipass launch \
--name dev \
--cpus 2 \
--memory 4G
multipass shell dev
# now inside Ubuntu:
sudo apt install docker.io
# Download from rancherdesktop.io
# or:
brew install --cask rancher
# Open app → choose runtime
# Docker or containerd
kubectl get nodes
docker run --rm hello-world
Common Tasks Cheatsheet
Colima daily commands
colima start # start VM + docker daemon
colima stop # stop (preserves data)
colima delete # destroy VM
colima status # check status + IP
colima ssh # shell into the Lima VM
colima list # all Colima instances
# change VM resources without recreating
colima stop
colima start --cpu 6 --memory 12
# update Colima
brew upgrade colima
OrbStack daily commands
orb list # list VMs
orb create ubuntu dev # new Ubuntu VM named "dev"
orb shell dev # shell into VM
orb run dev -- ls # run command in VM
orb stop dev # stop VM
orb delete dev # delete VM
# access VM by hostname from macOS
ssh dev.orb.local
Multipass daily commands
multipass launch # new Ubuntu VM
multipass list # list all VMs
multipass shell my-vm # SSH into VM
multipass exec my-vm -- cmd # run command
multipass info my-vm # VM details + IP
multipass mount . my-vm:/proj # mount directory
multipass stop my-vm # suspend
multipass delete my-vm # mark deleted
multipass purge # actually free disk
Running Docker inside Multipass
Multipass is VM-focused, not container-focused. To use Docker inside it:
multipass shell my-vm
# inside Ubuntu:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu
newgrp docker
docker run hello-world
Decision Guide
Pick the tool that matches your primary use case, not the one with the most features.
- You want a free, open-source Docker Desktop replacement
- You're already comfortable with CLI tools
- You need Docker CLI + Compose to "just work" without a GUI
- You want Docker or containerd, your choice
- You need local Kubernetes (add
--with-kubernetes) - Company policy prohibits commercial tools
- You're a solo developer / personal project (free tier)
- File I/O performance is critical (large monorepos, webpack dev server)
- You want Docker + Linux VMs in one beautiful app
- You want the fastest startup times and lowest memory footprint
- You're okay paying ~$8/month for commercial use
- You need a full Ubuntu VM, not just containers
- You're testing Ansible playbooks, Terraform configs, systemd services
- You need cross-platform VM management (Mac + Windows + Linux)
- You want to simulate cloud instances locally (cloud-init provisioning)
- You're a Canonical ecosystem user (Ubuntu, snaps)
- You need Kubernetes locally without manual setup
- You want a GUI app and prefer not to use CLI
- You need containerd + nerdctl specifically
- You're evaluating moving away from Docker to containerd ecosystem
- You need custom VM configurations — specific distro, kernel flags
- You want to build your own container tool setup
- You're doing low-level VM/kernel research
- Colima's defaults don't fit and you want full control
Quick reference card
| I want to… | Best choice | Runner-up |
|---|---|---|
| Replace Docker Desktop for free | Colima | Rancher Desktop |
| Fastest Docker on M-chip Mac | OrbStack | Colima (VZ+virtiofs) |
| Spin up Ubuntu VMs | Multipass | OrbStack Linux VMs |
| Local Kubernetes | Rancher Desktop | Colima + k3s |
| Test infra (Ansible, Terraform) | Multipass | Lima |
| Lowest RAM usage | OrbStack | Colima |
| containerd (no Docker) | Colima | Rancher Desktop |
| Cross-platform team setup | Rancher Desktop | Multipass |
--vm-type vz --vz-rosetta --mount-type virtiofs.