The claim that the homelab is “not VMware anymore” and that containers are replacing VMs is too simplistic. What is changing is what people use a full virtual machine for. A DNS filter, password manager, media server, or monitoring tool usually does not need to boot its own complete Linux installation. For those services, a container is often the rational choice: it has less overhead, deploys faster, and is easier to manage as code.
That does not make a container a universal replacement for a VM. They are different layers. A VM virtualizes a complete computer with its own kernel. A container generally shares the host kernel and packages the application together with its dependencies. That makes containers lighter, but their isolation boundary is typically weaker, and they cannot simply run a different operating system or kernel.
So the practical conclusion is not: get rid of virtualization. It is: stop deploying a VM when all you need is to run one application.
Why Containers Dominate Self-Hosted Services
Most homelab services consist of one application, its configuration, and a database or other persistent data. Think Pi-hole, Vaultwarden, Plex, Grafana, or a small monitoring stack. Docker Compose fits that pattern well. It defines services, networks, and volumes in one YAML file, then manages the complete stack as a unit.
That delivers three immediate benefits. You do not need to patch a full guest OS for every small service. You can make deployment reproducible by keeping the Compose definition in Git. And moving, upgrading, or rolling back a service becomes much more controlled.
Do not turn this into a religion, though. A container image is not automatically secure, manageable, or persistent. You still need to update images, manage secrets, back up volumes, and restrict network access. Anyone who thinks docker compose up -d is a management strategy is merely building a less visible pile of mess.
What People Are Actually Deploying
For a small homelab, a regular Linux host running Docker Compose is often the most logical route. Install Debian or Ubuntu Server on bare metal or a mini PC, define services in Compose, and keep the configuration under version control. There is no extra hypervisor layer if you do not need one. This is particularly strong for a modest number of stable, self-hosted applications.
A second, widely used pattern is Proxmox VE as the foundation. Not because every service should become a VM, but because a single host can manage both VMs and Linux Containers. Proxmox uses LXC for containers, with cgroup resource controls and integration with networking, storage, firewalling, and high-availability features. That is useful when you also need test machines, a Windows VM, a firewall lab, or a complete directory environment alongside containers.
Proxmox can now use OCI images to create containers. That sounds like “Docker directly in Proxmox,” but the nuance matters: Proxmox still labels OCI application-container support as a technology preview, and it translates those images to the existing LXC stack underneath. It is interesting to test, but it is not a reason to abandon Docker Compose and a mature Linux guest overnight.
If you want to run containers inside Proxmox, a small Linux VM with Docker or Podman is often a clean boundary. The VM provides a clear isolation layer and lets you back up or move the container host as one object. For use cases requiring maximum isolation and live migration, Proxmox itself recommends nesting containers inside a QEMU VM. Running Docker nested inside an LXC container can work, but it adds exceptions around privileges, kernel capabilities, and troubleshooting. Only choose it if you understand exactly why you want that complexity.
k3s Is Not a Mandatory Destination
Kubernetes often enters the discussion as soon as a homelab has more than one node. k3s lowers the entry barrier: it is a fully compliant, lightweight Kubernetes distribution with few external dependencies, delivered as a single binary or minimal container image. It also bundles components such as a container runtime, CoreDNS, ingress, and basic storage services.
That makes k3s excellent for people learning Kubernetes, GitOps, ingress, persistent volumes, scheduling, and failure scenarios. It is not, however, a rational upgrade for a single NUC running five household services. In that case, you replace one simple Compose file with a larger control plane, more concepts, and a much larger failure surface. That is not modernization; it is overengineering.
Use k3s when Kubernetes itself is the learning goal, when you genuinely want multiple nodes, or when you want to practice platform engineering. Use Docker Compose when you mainly want to run applications. That distinction prevents a lot of unnecessary homelab architecture.
VMware Is Not Gone — and Neither Are VMs
The idea that VMware no longer has a place in the homelab partly comes from the uncertainty around Broadcom, licensing, and product changes. But the statement that “the free ESXi version no longer exists” is currently false. Broadcom once again offers ESXi 8.0 Update 3e as a free hypervisor for basic virtualization and explicitly lists home labs as a target use case. The edition has real limitations: no vCenter management, vMotion, DRS, HA, VADP-based backups, or official support.
For a VMware, NSX, or VCF lab, that distinction is fundamental. If you want to learn vCenter, nested ESXi, vSAN, NSX, Avi, or lifecycle management realistically, you need VMs and usually a mature virtualization layer. Containers are not an alternative to that. A Kubernetes cluster on mini PCs teaches you nothing about the vSphere control plane or the NSX data plane.
VMs also retain a clear role outside the VMware world. Choose a VM when you need another kernel or operating system, need a stronger isolation boundary, want to test an appliance, or deliberately want to contain faults inside a guest environment. A Windows server, firewall appliance, nested hypervisor, and malware or patch-testing environment are not natural container workloads.
Snapshots Are Not Backups
A repeated claim is that containers always give you fast, almost free snapshots and backups. That is misleading. Snapshot behavior depends on the filesystem, storage backend, volumes, and the amount of data that changes after the snapshot. Persistent databases and bind mounts may not even receive the same protection as the container image.
A snapshot helps you roll back quickly. A backup protects you from deletion, corruption, ransomware, hardware loss, and a failure in the snapshot chain. Keep your Compose or Quadlet definitions in Git, back up persistent volumes through a proven restore procedure, and test that restore. Anything below that is wishful thinking.
Choose the Layer That Matches the Objective
Do not start by asking which tool is popular right now. Start by asking what your homelab must prove or deliver.
- Are you primarily running a limited set of self-hosted services? Choose a minimal Linux host with Docker Compose or Podman.
- Are you combining applications with several operating systems, appliances, and test VMs? Choose a hypervisor such as Proxmox VE, and reserve VMs for workloads that actually need them.
- Are you learning VMware Cloud Foundation, NSX, or Avi? Keep a vSphere-oriented lab. Proxmox is not a substitute in that case; at most, it is supporting infrastructure.
- Are you learning Kubernetes or platform engineering? Build a small k3s cluster, but accept that the platform itself is then the objective — not merely running a few containers.
The best homelabs are hybrid. Containers take over repetitive application work. VMs provide compatibility, isolation, and a realistic infrastructure lab. Anyone who dismisses either one as obsolete is confusing a deployment model with a complete architecture.
References
Microsoft Learn — Containers vs. virtual machines
Proxmox VE Wiki — Linux Container
K3s Documentation — What is K3s?
Broadcom Knowledge Base — VMware ESXi 8.0 Update 3e now available as a Free Hypervisor


