Apple's container vs Docker Desktop on the Mac
For most of the last decade, “run a container on a Mac” meant Docker Desktop. It worked. It still works. But somewhere along the way it became the loudest app on my machine: update badges in the menu bar, restart-the-daemon prompts, the occasional “your licence terms are changing” email. macOS stays out of the way; Docker Desktop has a habit of not.
Apple quietly shipped a contender. apple/container
reached version 1.0 on 9 June 2026, roughly a year after it was first shown at
WWDC 2025. After a few weeks of using it daily, here’s where I’ve landed.
What apple/container actually is
apple/container is Apple’s open source container runtime for macOS, written
in Swift and tuned for Apple silicon. Each Linux container runs inside its own
lightweight virtual machine, built on the macOS Virtualization framework.
There’s no big daemon idling in the background and no menu-bar whale.
A few things that matter:
- OCI all the way through. It pulls, runs, builds and pushes standard OCI images, so anything in Docker Hub, ghcr.io or your private registry just works. Images you build here run anywhere OCI runs.
- A VM per container. Every container gets its own micro-VM rather than sharing one Linux host, which means stronger isolation by default.
- The Containerization Swift package does the heavy lifting underneath for image, filesystem and process management.
- Apache-2.0, and you can read every line of it on GitHub.
It targets macOS 26 (Tahoe), runs on macOS 15 (Sequoia), and is Apple-silicon only. If you’re on an Intel Mac, this isn’t the tool for you.
Where it quietly beats Docker Desktop
The noise is gone. No menu-bar icon, no nagging daemon. You install it with Homebrew, start the background service, and forget it exists until you need it.
The resource footprint is lighter. Because the Virtualization framework allocates memory lazily and balloons it back to the host when a VM is idle, an idle builder shows a few hundred megabytes in Activity Monitor rather than the chunky reservation Docker Desktop tends to sit on.
Native arm64, with Rosetta for the rest. amd64 layers run through Rosetta during builds, which is dramatically faster than the QEMU translation path you fall back to elsewhere on the Mac.
No Docker subscription to think about. Docker Desktop is free for small
outfits (under 250 employees and under US$10M revenue) but paid above either of
those lines. If your team has crossed one, apple/container is genuinely free
and removes a procurement conversation.
Where Docker Desktop still wins
This is the part the release notes won’t shout about. apple/container is
genuinely good now, but its surface area is smaller.
- Docker Compose isn’t first-class. You can run multi-service stacks, but
there’s no native
docker compose upexperience. If your whole project hangs off acompose.yaml, this is the biggest speed bump. - A handful of flags are missing or behave differently. Things like
--network host,--restart=always,--privilegedand the health-check flags are the ones people trip on. You reach for--cap-addinstead of--privileged, which is arguably cleaner, but it’s still a rewrite of muscle memory. Worth skimming the v1.0 release notes for the current list. - Devcontainers lean on Docker. VS Code and Cursor’s devcontainer flow expects a Docker socket. That story is improving, but it isn’t seamless yet.
- Cold start in tight loops. Each container is a real VM, which boots fast
(under a second on the v1.0 numbers), but a fresh
runstill has more moving parts than Docker Desktop’s warm daemon. For a tight test, edit, rebuild loop you’ll feel the extra beat. - Small-file I/O. Bind-mounting a directory full of tens of thousands of
files (think
node_modules) is slower than on Docker Desktop. Great for sequential reads, rough for that specific case.
These are moving targets. v1.0 added a persistent “Container Machine” mode and new networking, and the gap closes a little with each release.
How painful is the switch, really
Honestly, less than I expected.
brew install container
brew services start container
That’s most of it. The CLI is close enough to docker that your fingers mostly
do the right thing: container run, container build, container images,
container push. The two that catch people are container ls instead of
docker ps, and the absence of docker compose.
The one thing worth doing on a fresh machine is bumping the defaults. Out of the
box, containers get a fairly lean slice of CPU and memory and the builder VM is
even smaller, so the first real container build can feel sluggish until you
give it room. Properties like container.cpus, container.memory and the
builder equivalents (build.cpus, build.memory) are one-liners, and because
memory is a ceiling rather than a hard reservation, you can afford to be
generous with them.
If your day is “build an image, run a thing, hit it from a browser”, you’ll be
productive in an afternoon. If your day is docker compose up on a
twelve-service stack, keep Docker around for now.
It’s not just Apple vs Docker
Worth naming the others, because this isn’t a two-horse race:
- OrbStack is the polished, fast commercial option with a free tier. It’s the closest thing to “Docker Desktop but nicer” if you want a GUI and don’t mind the licence.
- Colima is the quiet favourite: a tiny, free VM-on-Mac that hands you a
real Docker socket, so
docker composeand everything else just works. - Podman and Rancher Desktop are the daemonless and Kubernetes-flavoured open source options respectively.
- Lima is the low-level VM layer underneath several of these.
apple/container’s angle is that it’s first-party, native to macOS, and
betting hard on the VM-per-container model. Whether that matters to you depends
on whether you value isolation and native integration more than ecosystem
completeness.
The honest verdict
For running a dev database, building images, prototyping a service, or anything
where a single container is enough, apple/container is ready and it’s lovely
to use. The menu bar stays quiet.
For heavy Compose stacks, devcontainers, or workflows where production parity
with a Docker-based CI is non-negotiable, Docker Desktop (or Colima, if you want
to keep the docker CLI) is still the safer call.
My own setup: apple/container as the daily driver, Docker kept around for the
occasional Compose-heavy project. That feels about right for mid-2026, and I
suspect the gap narrows again before the year is out.