Almost every service I self-host runs in a Linux container, and the math just doesn’t favor a VM anymore

Almost every service I self-host runs in a Linux container, and the math just doesn’t favor a VM anymore

Almost every service I self-host runs in a Linux container, and the math just doesn’t favor a VM anymore

https://www.xda-developers.com/almost-every-service-self-host-linux-container-math-vm/

Publish Date: 2026-05-20 12:30:00

Source Domain: www.xda-developers.com

For most of the workloads I actually run at home, like Caddy, Affine, Immich, a Jellyfin frontend, and all the little Linux daemons that need to live somewhere, the default assumption is still that you spin up a VM. It’s the safe answer, many tutorials suggest it, and on a Proxmox box it’s the option sitting right at the top of the create menu. But almost every time I’ve started off with a VM, I’ve switched to a Linux container not too long after. The reason is simple: the math just doesn’t favor the VM for the kind of stuff a homelabber runs.

First, let’s sort some nomenclature. A “container” can refer to two different things, and they’re easy to mix up. System containers like LXC, LXD, and Incus behave like tiny Linux servers. You SSH in, run systemd, install packages, and treat them like long-lived machines. Application containers like Docker usually run one service from an image and are designed to be rebuilt, replaced, and thrown away. They aren’t the same workflow, but they refer to the same basic idea: isolated Linux user space running on the host’s kernel.

For someone coming from a VM mindset, LXC is the easier on-ramp, because it feels like a tiny VM until you notice it boots incredibly quickly. Containers run at near-native performance, they idle on a fraction of the RAM, and on copy-on-write storage like ZFS or btrfs, they snapshot for almost nothing. There are workloads where a VM still wins, but not as many as you might think.

It comes down to a single architectural choice

One kernel does all the work



Source