Skip to main content

Running Docker on a VPS: the practical starting point

Docker turned self-hosting from a weekend project into a single command. But running it well on a VPS takes a few deliberate choices, or you end up fighting it months later.

**Keep data in volumes, not containers.** A container is disposable; the data you care about should live in a named volume or a bound host directory. If you rebuild a container and lose your data, the data was in the wrong place.

**Set resource limits.** Without limits, one runaway container can consume all the RAM and take down everything else on the box. Set memory and CPU limits on your containers so a misbehaving app is contained.

**Terminate TLS in one place.** Run a single reverse proxy — Nginx or a proxy container — that owns ports 80 and 443 and routes to the containers behind it. Every app then gets HTTPS without each one handling certificates separately.

**Pin your image versions.** Using the "latest" tag seems convenient until an update breaks your app at 2am. Pin to a specific version, and update deliberately.

**Know where your logs go.** Container logs grow. Configure rotation so a chatty container does not fill the disk and wedge the server.

**Back up the volumes and the compose files.** Your compose file plus the data volumes together are the whole application. Version-control the compose files and back up the volumes with the same discipline as any other data.

Get these five right — volumes, limits, one proxy, pinned versions, log rotation — and Docker becomes a reliable way to run a whole stack of self-hosted apps on modest hardware.