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
| Runtime | License | RAM (idle) | Startup | UI | docker compose | k8s | Apple Silicon ARM |
|---|---|---|---|---|---|---|---|
| Docker Desktop | Paid for large orgs | ~2GB | ~10s | ✅ | ✅ | ✅ | ✅ |
| OrbStack | Free for personal, paid for company | ~500MB | ~2s | ✅ | ✅ | ✅ | ✅ (native) |
| colima | Open 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 dockerOr 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 container2.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
| Org | License |
|---|---|
| Under 250 employees AND under $10M revenue | Free (including personal) |
| Above that threshold | Paid (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 orbstackOr 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-worldIf 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 inFilesystem 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
| Use | Price |
|---|---|
| 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-composeThe 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-worldDefaults: 2 CPU, 2GB RAM, 60GB disk. Change them:
colima start --cpu 4 --memory 8 --disk 100Persisted 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 nodeBacked 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:tag5.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 /dataIn 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 version8. 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 defaultorcolima, etc.
- With multiple runtimes installed, switch explicitly:
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.virtualizationorOrbStack Helpershowing 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 setUSERin the Dockerfile
9. Comparison — Docker Desktop vs WSL2 (Mac vs Windows users)
A common question on mixed Mac/Windows teams.
| Situation | Recommended |
|---|---|
| Mac personal machine | OrbStack |
| Mac corporate machine (large org) | Docker Desktop (if licensed) or colima |
| Windows + WSL2 | docker-wsl2 — native WSL docker recommended |
| Team mandate | Whatever the company picked |
On cross-OS teams, standardize the docker-compose.yml/Dockerfile and the runtime difference mostly disappears.
References
- Mac initial setup — Homebrew prerequisites
- Docker on Windows (WSL2) — for cross-OS team comparison
- OrbStack official
- colima on GitHub
- Docker Desktop pricing — check before company use
Changelog
- 2026-05-16: First draft. Docker Desktop · OrbStack · colima comparison + Apple Silicon pitfalls + migration + six troubleshooting cases.
Keep reading
- Mac backups — Time Machine + cloud + encrypted external SSD
Time Machine setup, Backblaze/iCloud cloud combo, encrypted external SSDs, and four real recovery scenarios.
- macOS security basics — FileVault · Firewall · Gatekeeper · XProtect
The four security features to enable right after unboxing a Mac. How disk encryption, firewall, app validation, and malware quarantine work — and how to set them up.
- Mac dev environment weekly maintenance — update brew · toolchains · SDKs with one command
A single weekly shell script that updates Homebrew, Mac App Store, npm globals, rustup, cargo binaries, pipx, Flutter, CocoaPods, and oh-my-zsh.