Day 256 of the year: Programmers' Day. 10% off every month for as long as you keep your server. code DAY256. Claim 10% Programmers' Day: 10%: DAY256 Claim 10%
Skip to content
Docker host

A Docker host that is just a Linux box with root.

First month $1, then the normal monthly price. One per customer.

KVM, your own kernel, full root, NVMe RAID10, in Amsterdam or New York. Install Docker Engine from the official repository, write one compose file, stick Caddy or Traefik in front, and then run as many services as the RAM will hold. That's the whole setup. No container platform sitting in between, no per-container pricing, and traffic is unlimited, so nobody counts your image pulls.

Provisioning
30-60 safter payment
Network
9.40 Gbit/siperf3 send, Amsterdam
Storage
NVMe RAID10on every node
Traffic
Unlimitedno bandwidth bill
Plan
S-2 for one service, S-4 for a handful of them
1 vCPU, 2 GB and 30 GB NVMe runs one container well. 2 vCPU, 4 GB and 60 GB carries three to five services, a database and a reverse proxy among them.
Region
Amsterdam or New York, your pick
Same prices in both. Amsterdam is 9.0 ms from London, New York 5-8 ms from Boston. Between the two regions, 75-90 ms.
OS
Ubuntu 24.04 or Debian 13, either works
Both ship a current kernel and both have an official Docker apt repository. AlmaLinux 9 and 10 work too, if dnf is more your thing.
Engine
docker-ce plus the compose plugin, from Docker
From download.docker.com, not the distribution package. That way you get current releases of Docker Engine, Buildx and Compose v2 rather than something stale.
Proxy
Caddy or Traefik
Caddy when you want a short config and automatic TLS. Traefik when you'd rather define routes with labels on the containers. Portainer is optional on top.
Expect
KVM, your own kernel, nested virtualisation
Real cgroups and real namespaces, not a container-in-container setup. And nested virtualisation is there if a service needs a VM of its own.

Transparent pricing

Plans and prices

Monthly price, no setup fee
Day 256 of the year: Programmers' Day. 10% off every month for as long as you keep your server.DAY256Start a VPS with this code
1:2 to 1:4Shared vCPU on EPYC Milan, capped at one to four shares per node, with the node headroom left unsold.
PlanvCPUMemoryNVMeTrafficMonthly1 year
Standard
S-2Standard1vCPU2 GBMemory30 GBNVMe RAID10UnlimitedTraffic$7.99/moFirst month $1$7.19/mo on 1 yearStart for $1
S-4Standard2vCPU4 GBMemory60 GBNVMe RAID10UnlimitedTraffic$13.99/moFirst month $1$12.59/mo on 1 yearStart for $1
S-8Standard3vCPU8 GBMemory120 GBNVMe RAID10UnlimitedTraffic$24.99/moFirst month $1$22.49/mo on 1 yearStart for $1
S-16Standard4vCPU16 GBMemory240 GBNVMe RAID10UnlimitedTraffic$44.99/moFirst month $1$40.49/mo on 1 yearStart for $1
S-32Standard8vCPU32 GBMemory480 GBNVMe RAID10UnlimitedTraffic$84.99/moFirst month $1$76.49/mo on 1 yearStart for $1
S-64Standard16vCPU64 GBMemory720 GBNVMe RAID10UnlimitedTraffic$159.99/moFirst month $1$143.99/mo on 1 yearStart for $1
Dedicated CPU
D-4Dedicated1vCPU4 GBMemory45 GBNVMe RAID10UnlimitedTraffic$37.00/moFirst month $1$31.45/mo on 1 yearStart for $1
D-8Dedicated4vCPU8 GBMemory90 GBNVMe RAID10UnlimitedTraffic$69.00/moFirst month $1$58.65/mo on 1 yearStart for $1
D-16Dedicated4vCPU16 GBMemory160 GBNVMe RAID10UnlimitedTraffic$118.00/moFirst month $1$100.30/mo on 1 yearStart for $1
D-32Dedicated6vCPU32 GBMemory220 GBNVMe RAID10UnlimitedTraffic$215.00/mo$182.75/mo on 1 yearDeploy D-32
D-64Dedicated10vCPU64 GBMemory400 GBNVMe RAID10UnlimitedTraffic$377.00/mo$320.45/mo on 1 yearDeploy D-64
High Memory
H-64High Memory8vCPU64 GBMemory480 GBNVMe RAID10UnlimitedTraffic$249.00/mo$211.65/mo on 1 yearDeploy H-64
H-128High Memory16vCPU128 GBMemory960 GBNVMe RAID10UnlimitedTraffic$459.00/mo$390.15/mo on 1 yearDeploy H-128
H-192High Memory24vCPU192 GBMemory1.4 TBNVMe RAID10UnlimitedTraffic$669.00/mo$568.65/mo on 1 yearDeploy H-192
Prices in USD. Code DAY256 gives 10% off every month for as long as you keep your server, on monthly and yearly terms.

What a KVM VPS gives a Docker host that a shared container platform does not.

Docker wants a real kernel, with cgroups, namespaces and overlay filesystems underneath it. A KVM virtual machine has exactly that. The cheaper container-based hosts, quite a few of them, do not.

Your own kernel and modules

Docker Engine, overlay2, nftables and any kernel module you need work because the VM runs its own kernel. Upgrade it when you like, or boot a custom ISO if the stock images do not suit you.

NVMe for image layers and volumes

Pulling images, building layers and writing database volumes are small random IO. Our fio run on a 2 vCPU/4 GB dedicated instance measured 122,959 IOPS 4K random read and 87,730 write. Full numbers on the benchmarks page.

Unlimited traffic and a /64 IPv6

Pull images all night, serve media, sync backups while everyone sleeps. Nobody sends you a bandwidth bill. Each VPS comes with one IPv4 and a /64 IPv6 block, so if you like, every container gets a public IPv6 address of its own.

Resize in place, automate with the API

Need more RAM or vCPU? We add it without a reinstall. Data and IP stay put, and the price you pay is usually one short reboot. Because cloud-init and the REST API are there, a script can create and configure hosts for you.

Which plan for this workload.

Count the services first, then add up what they eat in memory. Docker itself costs almost nothing. The containers do, and that surprises people.

Setup Plan Why
One service, say Uptime Kuma, a Discord bot, a small API or a WireGuard container S-2 A single container plus the engine fits on 1 vCPU and 2 GB. The 30 GB disk, not the RAM, is what you run out of first.
Three to five services, Postgres or MySQL among them, plus a reverse proxy S-4 With 2 vCPU and 4 GB each service gets a few hundred MB and the database gets a real cache. Images and data fit in 60 GB.
Eight to ten services, or building images on the host itself S-8 3 vCPU and 8 GB take a build next to the running containers without a fight. 120 GB for layers, logs and volumes.
A CI runner, a pile of images, Elasticsearch or some JVM service S-16 4 vCPU, 16 GB and 240 GB. The memory-hungry services stop fighting each other for RAM.
Services that feel latency, steady CPU under load D-8 Four cores pinned 1:1 on EPYC Genoa. Nobody else on your cores, and so p99 latency stays flat.

One Docker service? The S-2 (1 vCPU, 2 GB, 30 GB NVMe) at €6.99 a month ($7.99) does it. The moment a database joins, we point people at the S-4 (2 vCPU, 4 GB, 60 GB NVMe) at €11.99 a month ($13.99), and we do it every time. Postgres wants a shared buffer, the reverse proxy wants a little, and every Node or Python service sits on 100 to 300 MB while doing nothing. Four gigabytes covers all of that without touching swap.

Disk fills faster than memory. Each image pull leaves layers behind, container logs grow without a limit by default, and volumes hold the real data. With 30 GB on the S-2 and 60 GB on the S-4, prune regularly and set log rotation on day one. When ten services and a build step share one host, the S-8 (3 vCPU, 8 GB, 120 GB NVMe) at €21.99 a month ($24.99) is the comfortable choice. Standard plans share vCPU at a 1:4 ratio, which is fine for web services; if a service needs steady CPU every second, look at Dedicated CPU on the plans page.

Setting it up on BuyVPS.

Step 1: order, log in, update

Choose Ubuntu 24.04 or Debian 13 at checkout. The VPS is ready 30 to 60 seconds after payment. Log in as root and update.

Step 2: install Docker Engine from the official repository

That's the Ubuntu variant straight from the Docker documentation. On Debian, replace both occurrences of ubuntu with debian and you're done.

Step 3: set log rotation before the first real container

The default json-file driver keeps every log line, forever. That's a disk-full ticket waiting to happen, and we get that one. Cap it now, restart the engine, and a chatty container will never take the disk down again.

Step 4: a deploy user and the firewall

Work as a normal user with SSH keys. But be aware that membership of the docker group is root-equivalent, so treat that account with the same care you'd give root. Open SSH, HTTP and HTTPS, nothing else.

Step 5: a compose stack with Caddy in front

Caddy terminates TLS and proxies to each service by its container name. Only Caddy publishes ports. The app itself never leaves the internal network. Simple.

Give every service a healthcheck, so a hung container restarts instead of sitting there green. And prune weekly, because images and stopped containers are what fill the 30 GB, not your data.

Point the A record at the VPS, then run docker compose up -d. Caddy fetches the certificate on the first request.

Step 6: Portainer, if you want a UI

Portainer is optional. If you want it, bind it to localhost and reach it through an SSH tunnel, or through Caddy with authentication in front. Never on a public port.

Pitfalls we see, and how to avoid them.

Logs eat the disk

A container that logs every request writes gigabytes into /var/lib/docker/containers. With no max-size in daemon.json, the 30 GB on an S-2 is gone in weeks. Set the rotation in step 3 and check with du -sh /var/lib/docker/containers now and then.

ufw does not see Docker's published ports

Docker inserts its own iptables rules ahead of ufw, so -p 5432:5432 is reachable from the internet even with ufw enabled. Publish internal services on 127.0.0.1 only, or put drop rules in the DOCKER-USER chain. Check from outside with a port scan.

Dangling images and build cache

Every pull and build leaves layers. Run docker system df to see the size and docker system prune -af --volumes when you are sure nothing in the list is needed. Keep volumes out of prune unless you mean it; that flag deletes data.

Everything runs as root

A container running as root that mounts the Docker socket owns the host. Add a user: line in compose, mount the socket only for tools that need it, and read the compose file of anything you copy from the internet before you start it.

Pick the region closest to your users.

Every HTTP request feels the round trip. Amsterdam sits next to AMS-IX, 8.5 ms from Frankfurt and 9.3 ms from Paris. New York lives in the Hudson Street carrier hotel, 4-7 ms from Philadelphia and 10-15 ms from Toronto. Image pulls from the registries are fast from either side. Pick the one nearest your users.

Amsterdam, for Europe
New York, for North America
See all locations

Questions about running Docker on a VPS.

Does Docker run on a KVM VPS without tricks?

Yes. KVM gives the VM its own kernel, so cgroups, namespaces and overlay2 behave the way they do on bare metal. Nothing to enable on our side. Install the engine from the official apt repository and it runs. That part is easy.

How many containers fit on the S-2?

Count memory, not containers. Small Go or static services take tens of megabytes, a Node app 100 to 300 MB, and Postgres wants a few hundred MB before it is useful at all. On 2 GB, one real service plus a proxy is comfortable and three small ones are possible. Then the 30 GB disk fills, which is usually the first limit.

Traefik or Caddy?

Caddy has the shorter config and gets TLS right without extra settings, which is why we show it above. Traefik reads labels from your containers, so the routes live next to the service definitions, and some people prefer that. Both are one container. Both are fine on the S-2 or the S-4.

Is Portainer necessary?

No. Compose files in Git are the more reproducible way to run a host, and they are what we run ourselves. Portainer earns its place as a read-only window on logs and containers. If you install it, bind it to 127.0.0.1 and reach it over an SSH tunnel.

Can I add disk without moving to a bigger plan?

Yes. Standard plans can add 100 GB NVMe for €11.00 a month, Dedicated for €16.00 a month. Resizing RAM and vCPU happens in place as well. Data and IP stay unchanged, and usually it costs one short reboot.

Which OS is best for a Docker host?

Ubuntu 24.04 and Debian 13 are the two we would pick, because Docker publishes packages for both and the kernels are current. Debian is a little leaner. Documentation for the engine is at docker.com.

Ready to deploy

Deploy a measured VPS

From $6.79/mo on a 2-year term. KVM on AMD EPYC, NVMe RAID10, ECC memory. No setup fee, cancel monthly.

30-day performance guarantee. Not satisfied? Full refund, no admin fee. How it works