Free trial · 14 days · Cancel anytimeGet started
Devops
··4 minutes read

Docker Compose vs Docker Swarm vs Kubernetes: what actually makes sense for a small team

By Pierrr Team

Every self-hosting or PaaS-evaluation conversation eventually lands on the same question: Compose, Swarm, or Kubernetes? The honest answer is that all three are still legitimate choices in 2026, they just solve different problems, and picking the wrong one costs you either time now or pain later. Here is what each one actually gets you, backed by where each project stands today rather than where it stood five years ago.

Docker Compose: the default starting point

Compose is a single-host tool. You describe a set of containers, networks and volumes in a YAML file, and docker compose up brings them to life on one machine. There is no scheduler, no cluster state, no automatic failover if that machine goes down. That sounds like a limitation, and it is, but it is also exactly why Compose stays relevant: almost everyone who has touched Docker already knows it, the file format is simple enough to read top to bottom, and it maps directly onto the mental model of "here are my services."

For a single VPS running a handful of apps behind a reverse proxy, Compose is not a compromise, it is the right tool. The moment you need more than one host (for redundancy, for capacity, for isolating tenants from each other) Compose runs out of road: there is no built-in load balancing across machines and no orchestration if a node disappears.

Docker Swarm: still alive, no longer racing ahead

Swarm's reputation took a hit years ago when Docker Inc. visibly de-prioritized it in favor of Kubernetes. What is less well known is that Mirantis, which now owns the enterprise Docker business, has publicly committed to supporting and developing Swarm, with regular security releases on roughly a six-week cadence (faster for critical CVEs) and enterprise customers running it in production at meaningful scale. Swarm did not die. It stopped growing quickly, and what ships today is recognizably the same product as a few years ago, evolving in security and operational polish rather than in new capabilities.

That makes Swarm a genuinely reasonable choice under specific conditions: a small team (say one to five engineers), fewer than about twenty services, no dedicated platform team, and a need to go from zero to a working production cluster in an afternoon rather than a quarter. If you already know Docker, you already know most of Swarm: the same Compose file format extends into a docker stack deploy, multi-host scheduling and rolling updates come for close to free, and the learning curve is measured in hours. The tradeoff is a smaller ecosystem: fewer managed offerings, fewer third-party integrations, and a slower flow of new features compared to Kubernetes' pace.

Kubernetes (and K3s): the industry standard, with a real cost of entry

Kubernetes has effectively won as the industry-wide answer to "how do you orchestrate containers at any serious scale." That comes with real advantages: the deepest ecosystem of any orchestrator (ingress controllers, GitOps tooling, secret management, autoscalers, observability stacks), the most transferable skill set if you or your hires ever work with another company's infrastructure, and a very active pace of development.

It also comes with real weight: etcd, control-plane components, RBAC, CRDs, and a vocabulary (Pods, Services, Ingresses, ReplicaSets) that takes real time to internalize. Running vanilla Kubernetes yourself, on your own servers, is a legitimate multi-week investment before you feel comfortable operating it.

This is where lightweight distributions change the calculation. K3s strips out a large part of that operational weight: it ships as a single binary, swaps etcd for SQLite by default on small clusters, bundles an ingress controller, and stays fully API-compatible with upstream Kubernetes. For a small team self-hosting on a handful of VPS or bare-metal boxes, K3s is frequently the best long-term bet: the learning curve is real but front-loaded, and everything you learn (Helm charts, kubectl, the API model) transfers directly to any managed Kubernetes service later.

How to actually choose

A few honest heuristics, in order:

  • If you run one app on one machine and redundancy is not a requirement yet, use Compose. Anything else is premature complexity.
  • If you need more than one machine, have a small team, and want something running this week without hiring a platform engineer, Swarm remains a defensible choice, especially if your workload is already comfortably described as a Compose file today.
  • If you expect to grow past a handful of services, need multi-tenant isolation, want GitOps-style reconciliation, or expect to eventually need managed Kubernetes elsewhere, invest in K3s (or full Kubernetes) sooner rather than later. The tooling ecosystem you will eventually want (cert-manager, sealed-secrets, ingress-nginx, Flux or Argo) is built for Kubernetes first, and often Kubernetes only.
  • Resist "we might need Kubernetes eventually" as a reason to start there on day one. The operational cost is front-loaded; pay it when the multi-host or multi-tenant requirement is real, not hypothetical.

The short version

Compose for one machine, Swarm if you want a small, low-ceremony multi-host cluster and know you will not grow far past it, K3s (or Kubernetes) if you expect real growth, need multi-tenancy, or want your skills and tooling choices to compound instead of dead-end. None of the three is obsolete. Pick based on the shape of the problem you actually have this quarter, not the one you might have in two years.