devAlice
← Mac

Docker on Mac — Docker Desktop vs OrbStack vs colima + Apple Silicon setup

Comparing three container runtimes on Apple Silicon Mac. License, performance, RAM usage, and compatibility — pick the right one for your situation.

When you say "Docker on Mac," most people reach for Docker Desktop. But after the 2021 license change (paid for companies with 250+ employees or $10M+ revenue), alternatives have caught up fast. OrbStack and colima are the two main alternatives, and both are lighter on Apple Silicon.

I think the container runtime decision is underrated. Not because OrbStack vs Docker Desktop is a critical architectural choice, but rather because the runtime determines what your local environment actually feels like to work in — startup time, RAM overhead, and Apple Silicon compatibility all compound into dozens of minutes per week. Because local container performance is a daily friction cost, and it's worth getting right once.

This guide compares the three runtimes on Apple Silicon (M1–M4) + macOS 14+ and gives you a decision table for which to pick when. Once you choose, follow that runtime's section for the actual install steps.

TL;DR

RuntimeLicenseRAM (idle)StartupUIdocker composek8sApple Silicon ARM
Docker DesktopPaid for large orgs~2GB~10s
OrbStackFree for personal, paid for company~500MB~2s✅ (native)
colimaOpen source (MIT)~600MB~5s❌ CLI only✅ (optional)
  • Corporate policy OK + want a UI → Docker Desktop
  • Personal machine + want fast/light → OrbStack (strong recommendation)
  • Fully free + CLI-only → colima

Prerequisites

  • macOS 14+ + Apple Silicon (M1–M4) recommended
  • Homebrew (Mac initial setup)
  • 16GB RAM or more (8GB stalls during builds)

1. Decision table — which one to pick

Pick Docker Desktop if

  • You need the Kubernetes UI — Docker Desktop's k8s tab is the simplest
  • It's the company standard — going against the team's choice costs you in troubleshooting time
  • You mix Mac and Windows on the same team — Docker Desktop is the most consistent experience

Pick OrbStack if

  • Personal machine + value for money — free for personal use, ~4× faster than Docker Desktop
  • You also want lightweight Linux VMs — OrbStack bundles Docker + a Linux machine manager
  • Limited RAM — idle ~500MB

Pick colima if

  • Need to avoid a commercial license — MIT open source. Safe for corporate use
  • Automation-first — CLI-only, fully driven by config files
  • CI / dev container compatibility — Lima-based, integrates well with macOS

If you can't decide, start with the OrbStack 30-day free trial. Smoothest experience.


2. Docker Desktop setup — 10 min

2.1 Install

brew install --cask docker

Or download from docker.com. Apple Silicon build is picked automatically.

2.2 First run

Cmd + Space → Docker or Spotlight. When the 🐳 icon appears in the menu bar, you're up.

docker --version       # Docker version 27.x.x
docker run hello-world # standard hello-world container

2.3 Resource tuning (required)

Docker Desktop → Settings → Resources:

  • CPUs: half the host CPUs (4 on an 8-core machine)
  • Memory: 25–50% of host RAM (4–8GB on a 16GB machine)
  • Disk image size: 60GB+ (images accumulate fast)

Out of the box it eats ~2GB at idle. Tune as above.

2.4 License caveat

OrgLicense
Under 250 employees AND under $10M revenueFree (including personal)
Above that thresholdPaid (from $9/seat/month)

Check your company policy before using it. Official license page.


3. OrbStack setup — 5 min

3.1 Install

brew install --cask orbstack

Or orbstack.dev.

3.2 First run

Launch OrbStack → accept the license → Docker commands work immediately.

docker --version       # Docker version 27.x.x (OrbStack-bundled)
docker run hello-world

If Docker Desktop is also installed, their PATH entries collide. Quit Docker Desktop before using OrbStack.

3.3 OrbStack's unique strengths

Linux machines (optional) — spin up a lightweight Ubuntu VM in 1 second. SSH works.

orb create ubuntu my-ubuntu
orb -m my-ubuntu        # SSH in

Filesystem integration — container files mount directly at ~/OrbStack/. You can code ~/OrbStack/docker/... from the host.

Auto resource scaling — no explicit RAM setting. Scales up/down with usage.

3.4 License

UsePrice
Personal (learning, open source)Free
Company (1+ seat)$8/month (Pro) — cheaper than Docker Desktop

4. colima setup — 10 min

4.1 Install

brew install colima docker docker-compose

The docker CLI is separate. colima only provides the backend VM.

4.2 Start

colima start
# colima boots a Lima VM and downloads ~500MB on first run
 
docker --version
docker run hello-world

Defaults: 2 CPU, 2GB RAM, 60GB disk. Change them:

colima start --cpu 4 --memory 8 --disk 100

Persisted in ~/.colima/default/colima.yaml.

4.3 Lifecycle

colima status       # running?
colima stop         # stop (requires start again after reboot)
colima delete       # delete the VM itself (images + volumes lost)

4.4 Kubernetes (optional)

colima start --kubernetes
kubectl get nodes   # one colima node

Backed by k3s. Light, but not a substitute for a real prod-like cluster.


5. Common pitfalls on Apple Silicon

5.1 ARM images vs AMD64 images

Most official images (node, python, nginx) already ship ARM64 builds. Occasionally you'll see:

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8)

Fixes:

# 1) Find the ARM tag of the same image
docker pull --platform linux/arm64 myimage:tag
 
# 2) If unavoidable, force AMD64 (Rosetta emulation — slow)
docker run --platform linux/amd64 myimage:tag

5.2 Volume mount performance

The macOS-FS → Linux-container mount is slow on every runtime. Most noticeable on big node_modules, Rails apps, etc.

  • OrbStack: fastest (Virtio-fs optimized)
  • Docker Desktop: enable VirtioFS (Settings → General → "Use Virtio-fs")
  • colima: colima start --mount-type virtiofs (Lima 1.x+)

Or keep the source inside a docker volume — fast but complicates IDE integration.

5.3 buildx multi-arch builds

In CI when you need to push both AMD64 and ARM64:

docker buildx create --use --name multiarch
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest --push .

Docker Desktop and OrbStack bundle buildx. colima may need extra setup.


6. Migration — Docker Desktop → OrbStack

Images and volumes are isolated per runtime, so there's no automatic migration. Order:

# 1. Export important images/volumes from Docker Desktop
docker save myimage:tag -o myimage.tar
docker run --rm -v mydata:/data -v $(pwd):/backup alpine \
  tar czf /backup/mydata.tar.gz -C /data .
 
# 2. Quit Docker Desktop
osascript -e 'quit app "Docker"'
 
# 3. Start OrbStack, then import
docker load -i myimage.tar
docker run --rm -v mydata:/data -v $(pwd):/backup alpine \
  tar xzf /backup/mydata.tar.gz -C /data

In practice most people skip the migration: a fresh docker compose up in OrbStack rebuilds everything.


7. Verify

All of these should succeed on the runtime you picked:

# 1. Basic
docker --version
docker run hello-world
 
# 2. Container + port
docker run -d --name nginx -p 8080:80 nginx
curl http://localhost:8080
docker stop nginx && docker rm nginx
 
# 3. Volume mount
mkdir -p /tmp/dockertest && echo "hello" > /tmp/dockertest/test.txt
docker run --rm -v /tmp/dockertest:/data alpine cat /data/test.txt
 
# 4. compose
docker compose version
 
# 5. buildx
docker buildx version

8. Troubleshooting

Cannot connect to the Docker daemon

  • Is the runtime actually running? Docker Desktop menu-bar icon, orb status, colima status
  • docker context ls — is the active context correct?
    • With multiple runtimes installed, switch explicitly: docker context use default or colima, etc.

Image builds are too slow

  • Confirm BuildKit is enabled: DOCKER_BUILDKIT=1 (Docker 23+ uses it by default)
  • Use the cache: put frequently-changing lines near the bottom of the Dockerfile
  • Shrink context with .dockerignore (exclude .git, node_modules)

docker-compose vs docker compose

  • New (v2): docker compose (space). Recommended
  • Old (v1): docker-compose (hyphen). Approaching EOL
  • All runtimes bundle v2. Alias if you still need v1's spelling:
    alias docker-compose='docker compose'

Memory leak after docker run

  • macOS Activity Monitor → com.docker.virtualization or OrbStack Helper showing abnormal memory
  • Restart the runtime: Docker Desktop "Restart" / orb restart / colima restart

Volume mount shows up as empty

  • Check host-path permissions: macOS Documents, Desktop, Downloads need explicit permission
  • System Settings → Privacy & Security → Files and Folders → grant access to the runtime

permission denied writing to a mounted file from inside the container

  • Container UID and host UID don't match
  • Fix: docker run -u $(id -u):$(id -g) ... or set USER in the Dockerfile

9. Comparison — Docker Desktop vs WSL2 (Mac vs Windows users)

A common question on mixed Mac/Windows teams.

SituationRecommended
Mac personal machineOrbStack
Mac corporate machine (large org)Docker Desktop (if licensed) or colima
Windows + WSL2docker-wsl2 — native WSL docker recommended
Team mandateWhatever the company picked

On cross-OS teams, standardize the docker-compose.yml/Dockerfile and the runtime difference mostly disappears.


References

Changelog

  • 2026-05-16: First draft. Docker Desktop · OrbStack · colima comparison + Apple Silicon pitfalls + migration + six troubleshooting cases.

Keep reading