OrbStack: Docker on Mac Without the Docker Desktop Tax
Docker Desktop wants $11/month for a business license. OrbStack does the same thing, faster, with less RAM, and it’s free for personal use.
If you’re running containers on a Mac and haven’t switched yet, you’re leaving performance on the table.
What OrbStack Gets Right
OrbStack is a drop-in Docker replacement for macOS. Same docker commands. Same docker-compose files. Same images from Docker Hub. But with a lightweight VM that starts in under two seconds and uses a fraction of the memory.
I switched from Docker Desktop to OrbStack on a Mac Mini M4. The difference was immediately noticeable:
- VM boot time: Under 2 seconds (Docker Desktop: 15-30 seconds)
- Idle memory: ~200MB (Docker Desktop: 1-2GB)
- Disk usage: Shared with macOS filesystem (no fixed-size VM disk)
- Rosetta support: x86 containers run on Apple Silicon via Rosetta 2
The commands are identical. docker run, docker build, docker-compose up – all work exactly as expected. The only change is what’s running underneath.
Installation
brew install --cask orbstackOpen OrbStack once to complete setup (it needs to install a helper tool and accept a license). After that, everything runs from the CLI.
One gotcha I hit: OrbStack needs Rosetta installed on Apple Silicon Macs. If you see a crash about Rosetta on first start:
sudo softwareupdate --install-rosetta --agree-to-licenseThen start OrbStack again.
The Networking Gotcha
This is the thing nobody tells you until you waste an hour debugging it.
OrbStack’s Docker bridge networking – the standard -p 8080:2368 port forwarding – doesn’t always work reliably on Apple Silicon. I had a container running, Docker reported the port mapping, but curl localhost:8080 returned nothing.
The container was reachable at its internal IP (192.168.215.x), but the port forward to the host was silently failing.
The fix: Use --network host mode.
docker run -d --network host --name my-app my-imageIn host mode, the container shares the Mac’s network directly. No port mapping needed – whatever port the app listens on inside the container is accessible on localhost at the same port.
The tradeoff: you have to manage port conflicts yourself. Two containers can’t use the same port. For a solo builder running 3-5 services, this is manageable. For a production microservices setup with 50 containers, you’d want bridge networking working.
Running Ghost in OrbStack
Here’s the exact command I used to deploy a production Ghost blog:
docker run -d \
--name my-ghost \
--restart unless-stopped \
--network host \
-e url=https://mysite.com \
-e database__client=sqlite3 \
-e database__connection__filename=/var/lib/ghost/content/data/ghost.db \
-e NODE_ENV=production \
-v ~/sites/my-ghost/content:/var/lib/ghost/content \
ghost:5-alpineBreaking it down: - --restart unless-stopped: Docker restarts the container on crash or reboot - --network host: Skip bridge networking, listen directly on host ports - -e url=https://mysite.com: Ghost needs to know its public URL - -v ~/sites/...:/var/lib/ghost/content: Persistent storage survives container rebuilds - ghost:5-alpine: Alpine-based image, small footprint (~170MB)
Ghost boots in under a second on the Alpine image. The SQLite database lives in the mounted volume, so you can backup your entire blog by copying one directory.
OrbStack vs Docker Desktop vs Colima
For solo builders on Mac, here’s the honest comparison:
| Feature | Docker Desktop | OrbStack | Colima |
|---|---|---|---|
| Price | Free personal, $11/mo business | Free personal | Free |
| Boot time | 15-30s | <2s | 5-10s |
| Idle RAM | 1-2GB | ~200MB | ~300MB |
| Docker Compose | Yes | Yes | Yes |
| Kubernetes | Yes | Yes | Via minikube |
| GUI | Yes | Yes | No |
| Apple Silicon | Yes (Rosetta) | Yes (Rosetta) | Yes |
| Networking | Reliable | Host mode recommended | Reliable |
OrbStack wins on speed and resource usage. Docker Desktop wins on ecosystem maturity. Colima wins on simplicity (it’s just Lima + Docker).
For a Mac Mini being used as a home server, OrbStack’s low resource footprint matters. Every megabyte of RAM not used by the container runtime is available for your actual services.
The Solo Builder Container Stack
Once you have OrbStack running, the container ecosystem opens up:
- Ghost (blog/CMS):
ghost:5-alpine - Umami (analytics):
ghcr.io/umami-software/umami - PostgreSQL (database):
postgres:16-alpine - Nginx (reverse proxy):
nginx:alpine - Mailcow (email):
mailcow/mailcow-dockerized
Each runs in its own container, with its own data volume, isolated from everything else. Update one without touching the others. Roll back by switching to the previous image tag.
This is the modern solo builder infrastructure: containers on hardware you own, tunneled to the internet for free, backed up to wherever you want.
No monthly hosting bill. No vendor lock-in. No terms of service that can delete your data overnight.
Just containers, a tunnel, and a Mac.