VM-per-container explained

VM-per-container explained

There’s a common mental model when it comes to running containers: a single virtual machine (VM), hosting a full Linux OS, running containerd or Docker and managing multiple containers side by side. This is how tools like Docker Desktop, Colima, Lima, and Rancher Desktop work today.

But that’s not the only model—and it’s not the most secure.

With the introduction of Apple’s Container Framework (and the architectural direction we’ve taken at Edera), a new model is becoming more visible: a dedicated VM per container. It sounds heavier—but it isn’t. In fact, it’s more secure, easier to isolate, and opens the door for performance and management gains that the traditional shared-VM model can’t match.

This guide walks through the differences, clarifies common misconceptions, and explains why Edera chose the per-container VM model for production infrastructure.


Diagram of Docker vs Apple Container Framework

Traditional model: one VM, many containers

In Docker-based systems like Docker Desktop, a single Linux VM is created (usually via hyperkit or QEMU). That VM runs containerd or dockerd, which orchestrates and executes all containers in a shared kernel and user space.

  • All containers share the same kernel
  • A container escape = visibility into the whole node
  • Secrets, /proc, memory, and process tables are shared
  • Proxying Docker sockets and mounting volumes is straightforward

This works well for development — but it’s risky in production.


Apple Container Framework: a VM per container

Apple flips the model: each container runs inside its own lightweight VM.

  • The VM boots a minimal Linux kernel
  • Inside is just a container and a tiny init (Apple: vminitd, Edera: Rust init)
  • No systemd. No daemons. No bloat.
  • Hypervisor isolation — not just namespace separation

Despite how it sounds, this is:

  • Fast to boot
  • Highly isolated
  • Far more secure than the shared-kernel model

Diagram of Edera zone-based architecture

What Edera adds (beyond Apple)

Edera brings this architecture into production, adding:

  • 🔍 Observability and lifecycle tooling
  • 📦 Kernels and drivers shipped as OCI images
  • 🌐 No KVM or nested virtualization — we use a paravirtualized hypervisor

That last point means:

  • No dependency on vmx or special hardware
  • Runs anywhere: cloud, local, edge, dev machines

Demo: Docker vs Apple Container Framework

In this demo:

  • One container sets an environment variable containing a secret
  • The other container tries to read it

Result:

  • In Docker: the secret is visible via /proc
  • In Apple’s container model: the second container is in its own VM — it can’t see anything

What changes with micro-VMs?

Feature Docker / Colima / Lima Apple Container Edera
Kernel per container Shared Isolated Isolated
Nested virtualization needed Yes No No
Full distro inside VM Often Minimal Minimal
Observability + mgmt Limited Limited Built-in
Security boundary Namespace Hypervisor Hypervisor

When you run a VM per container, you’re not just isolating workloads—you’re redefining the threat model.
This is where containerization is headed. Edera’s already there.
To learn more check out our architecture overview.

Last updated on