← Study Notes
🖥 macOS · Container & VM Tooling · 2025

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.

Colima Lima Multipass OrbStack Rancher Desktop Docker Desktop Apple Silicon / Intel containerd · Docker · nerdctl
00 — Why this is complicated

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.

Your Mac (macOS / XNU kernel) │ ├─ Hypervisor Framework ← Apple's official VM API (macOS 11+, no root) │ or ├─ QEMU ← older/cross-platform emulation │ ▼ Linux Guest VM (Alpine, Ubuntu, Debian …) │ ├─ Docker daemon (or containerd) │ │ │ └─ Your containers (nginx, postgres, node …) │ └─ Full Ubuntu (Multipass, Lima general VMs)

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.

01 — Categories

Tool Categories at a Glance

These tools serve different primary jobs. Understanding the category prevents apples-to-oranges comparisons.

Lima
The low-level VM layer
Open Source VM primitive

The base that Colima, Rancher, and others are built on. Most users use it indirectly.

Colima
Container runtimes on macOS
Open Source Docker · containerd

Minimal CLI tool. Wraps Lima + installs Docker/containerd inside. Drop-in replacement for Docker Desktop.

OrbStack
Docker + Linux VMs, fast
Free personal Commercial

Native macOS app with custom kernel integration. The fastest option. Has a built-in Docker replacement + lightweight Linux VMs.

Multipass
Instant Ubuntu VMs
Open Source Canonical

From Canonical (Ubuntu). Focused on spinning up Ubuntu VMs quickly. Not primarily a container tool.

Rancher Desktop
Docker + Kubernetes GUI
Open Source SUSE

GUI app with Docker CLI + built-in k3s Kubernetes. Great for k8s devs.

Docker Desktop
The original
Commercial >250 emp Docker Inc.

The most used. Heavy GUI app. Requires paid subscription for commercial use at scale.

02 — Under the Hood

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
VZ vs QEMU: Colima supports both. --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+.
03 — The Base Layer

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.

example: lima start (uses default Ubuntu template)
# 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
When to use Lima directly: When you need a custom Linux VM — specific distro, custom kernel flags, or want to build your own container runtime setup from scratch. Otherwise use Colima (it's a better container-focused wrapper).
04 — Container runtimes

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_HOST and it just works with all Docker tooling
  • Two runtimes: Docker Engine or containerd + nerdctl
  • Rosetta support: --vm-type vz --vz-rosetta enables x86 images on Apple Silicon
  • Multi-instance: run multiple Colima VMs with different configs

Install & start

Setup
# install
brew install colima docker

# start with Docker runtime
colima start

# verify
docker ps
docker run hello-world
With containerd
# start with containerd
colima start --runtime containerd

# use nerdctl instead of docker
brew install nerdctl
nerdctl run hello-world

VM configuration

colima — common flags
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 + kubernetes
colima start --with-kubernetes

# kubeconfig is set automatically
kubectl get nodes

Colima config file

~/.colima/default/colima.yaml
cpu: 4
memory: 8
disk: 60
vmType: vz
rosetta: true
mountType: virtiofs
runtime: docker
kubernetes:
  enabled: false
  version: v1.28.0+k3s1
Pro tip — Docker socket: If you have multiple Docker sources (Colima + another tool), set DOCKER_HOST=unix://$HOME/.colima/default/docker.sock to be explicit.

Strengths & weaknesses

STRENGTHS
  • 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
WEAKNESSES
  • File sharing slower than OrbStack
  • CLI only (no GUI)
  • Manual config vs drag-and-drop
  • VirtioFS requires macOS 13+
05 — Fast & modern

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

Docker Containers
100% Docker-compatible

Drop-in replacement. Your existing docker compose files, Dockerfiles, and Docker CLI commands work unchanged.

Linux VMs
Instant Ubuntu/Debian/Fedora VMs

Spin up a full Ubuntu/Debian VM with one command. Like Multipass but faster and integrated into the same tool.

OrbStack — quickstart
# 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

Free for personal use. Commercial use requires a subscription (~$8/month/user). Large teams need to evaluate this — but for individuals and open-source work it's completely free.

Strengths & weaknesses

STRENGTHS
  • 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)
WEAKNESSES
  • Commercial (paid for business use)
  • macOS only — no Windows/Linux parity
  • Proprietary internals
  • Less control over VM config
06 — Ubuntu VMs

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

Multipass — 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:

cloud-init.yaml
package_update: true
packages:
  - docker.io
  - nodejs
  - git
runcmd:
  - usermod -aG docker ubuntu
  - systemctl enable docker
launch with cloud-init
multipass launch --cloud-init cloud-init.yaml --name my-dev

Strengths & weaknesses

STRENGTHS
  • Full Ubuntu environment (apt, systemd, etc.)
  • Cross-platform (Mac/Win/Linux)
  • Cloud-init provisioning
  • Good for testing infra/Ansible/Terraform locally
  • Official Canonical support
WEAKNESSES
  • Heavier than container tools
  • Ubuntu-only (no Fedora, Debian…)
  • No native Docker integration
  • Slower than OrbStack
  • Not for container-first workflows
07 — k8s + containers

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
after installing Rancher Desktop
# 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

STRENGTHS
  • Free & open source
  • Kubernetes out of the box
  • GUI for resource management
  • Docker CLI compatible
  • Cross-platform
WEAKNESSES
  • Electron app (heavy)
  • Slower than Colima/OrbStack
  • Not ideal if you don't need k8s
  • Occasional stability issues
08 — The original

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
Licensing reality check (2024): Docker Desktop is free for individuals and small companies (<250 employees AND <$10M revenue). If either threshold is crossed, you need a paid Docker Business subscription (~$21/user/month). This drove adoption of Colima/OrbStack in many companies.
09 — Side by side

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
10 — Speed

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.

OrbStack
~95%
Colima (VZ+virtiofs)
~80%
Docker Desktop
~72%
Rancher Desktop
~65%
Colima (QEMU)
~50%

% of native Linux file I/O speed (approximate)

Memory usage at idle

OrbStack
~300MB
Colima
~500MB
Rancher Desktop
~900MB
Docker Desktop
~1.2GB
Multipass (Ubuntu VM)
~2GB+
Key insight: OrbStack wins on both metrics because it uses a custom purpose-built kernel rather than a full Linux VM. Colima with --vm-type vz --mount-type virtiofs is the best open-source option.
11 — File sharing deep dive

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
Practical advice: Always use --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:

docker-compose.yml — volume trick for node_modules
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
12 — Get started

Quickstart for Each Tool

Colima
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
OrbStack
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
Multipass
brew install multipass

multipass launch \
  --name dev \
  --cpus 2 \
  --memory 4G

multipass shell dev
# now inside Ubuntu:
sudo apt install docker.io
Rancher Desktop
# Download from rancherdesktop.io
# or:
brew install --cask rancher

# Open app → choose runtime
# Docker or containerd

kubectl get nodes
docker run --rm hello-world
13 — Daily workflow

Common Tasks Cheatsheet

Colima daily commands

colima — lifecycle
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

orbstack — linux VMs
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 — daily use
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:

install Docker inside a Multipass VM
multipass shell my-vm
# inside Ubuntu:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu
newgrp docker
docker run hello-world
14 — What to pick

Decision Guide

Pick the tool that matches your primary use case, not the one with the most features.

Use Colima when…
  • 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
Use OrbStack when…
  • 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
Use Multipass when…
  • 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)
Use Rancher Desktop when…
  • 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
Use Lima directly when…
  • 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 choiceRunner-up
Replace Docker Desktop for freeColimaRancher Desktop
Fastest Docker on M-chip MacOrbStackColima (VZ+virtiofs)
Spin up Ubuntu VMsMultipassOrbStack Linux VMs
Local KubernetesRancher DesktopColima + k3s
Test infra (Ansible, Terraform)MultipassLima
Lowest RAM usageOrbStackColima
containerd (no Docker)ColimaRancher Desktop
Cross-platform team setupRancher DesktopMultipass
Most common answer for macOS devs in 2025: If you're an individual or small team → OrbStack (it's just faster and easier). If you're in a company that can't pay for tools → Colima with --vm-type vz --vz-rosetta --mount-type virtiofs.