Launch a self-hosted Docker VPS in minutes

Self-hosted containers on a server you control. Order a Docker VPS, paste one install block from Docker's official repository, and your first docker compose up runs a few minutes later.

What you can do with a self-hosted Docker VPS

One server and as many containers as it fits. The app, the database, the queue, and the reverse proxy run side by side — each in its own container, with its own dependencies.

Deploy an entire application stack from one file

Define your services, networks, and volumes in one Compose file, then start the whole stack with docker compose up -d. The same file runs on a laptop, a staging box, and this VPS, so environments stay comparable across the team.

Pull ready images instead of building servers

Pull ready-made images from Docker Hub or your private container registry instead of configuring every service from scratch. A database, a queue, and a reverse proxy can each run from a predefined image with minimal manual setup.

Release updates without losing data

Keep application data in named volumes rather than in a container's writable layer. When Docker recreates a container during an update, the volume is reattached to its replacement. A rollback is the same command with the previous image tag.

Run a microservices architecture on one server

Put related services on a user-defined bridge network and let them reach each other by service name. Publish only the ports that need external traffic, and your database can remain accessible to the app without listening on the public interface.

Recover from reboots without manual intervention

Set a restart policy such as unless-stopped, and Docker can bring your containers back after the daemon or VPS restarts. Your workloads recover automatically instead of waiting for someone to log in and start them manually.

Run Docker without root privileges

Run the Docker daemon and containers as a non-root user with rootless mode. It reduces the impact of a potential daemon or runtime vulnerability, a useful extra boundary on an internet-facing VPS.

Choose a Docker VPS hosting plan

Docker Engine's own footprint is small, so size the plan for what runs inside the containers. We recommend starting with a Start VPS with 2 CPU cores and 2 GB of RAM. For a typical Compose stack with a database and reverse proxy, choose a Medium VPS with 4 GB of RAM.

  • 40 Countries
    Linux
    Intel Xeon
    AMD Ryzen

    From$10.19 / 1 month
    $9.68 with is*smart
    • Xeon 2x2.20 GHz CPU
    • 2 Gb RAM
    • 30GB SSD Drive
    • 3 Tb Bandwidth
    • IPV4 optional
    • 1Gbps Port
    • Weekly Backup
    • KVM Virtualization
    • Control panels
  • 40 Countries
    Linux
    Intel Xeon
    AMD Ryzen

    From$21.24 / 1 month
    $20.18 with is*smart
    • Xeon 3x2.20 GHz CPU
    • 4 Gb RAM
    • 40GB SSD Drive
    • Unmetered Bandwidth
    • IPV4 optional
    • 1Gbps Port
    • Weekly Backup
    • KVM Virtualization
    • Control panels
  • 40 Countries
    Linux
    Intel Xeon
    AMD Ryzen

    From$33.99 / 1 month
    $32.29 with is*smart
    • Xeon 4x2.20 GHz CPU
    • 8 Gb RAM
    • 50GB SSD Drive
    • Unmetered Bandwidth
    • IPV4 optional
    • 1Gbps Port
    • Weekly Backup
    • KVM Virtualization
    • Control panels

Boost Your VPS Server Resources

Check out how you can change the configuration of your VPS. You can purchase additional drive space, increase CPU performance, add RAM, and take advantage of additional services without having to switch to a new plan.

How to deploy Docker on a VPS

Go from a clean Ubuntu VPS to a running Docker stack behind HTTPS in five steps.

Step 01 — Order your VPS and connect

Choose an Ubuntu VPS in a location close to your users or the external APIs your containers call, then connect over SSH. The commands below run in a root shell.

ssh root@your-server-ip

If direct root login is disabled, connect with your regular account and run sudo -i.

Step 02 — Install Docker Engine and Compose

Install Docker Engine and the Compose plugin from Docker's official apt repository:

apt updateapt install ca-certificates curlinstall -m 0755 -d /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg \  -o /etc/apt/keyrings/docker.ascchmod a+r /etc/apt/keyrings/docker.asc tee /etc/apt/sources.list.d/docker.sources <<EOFTypes: debURIs: https://download.docker.com/linux/ubuntuSuites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")Components: stableArchitectures: $(dpkg --print-architecture)Signed-By: /etc/apt/keyrings/docker.ascEOF apt updateapt install docker-ce docker-ce-cli containerd.io \  docker-buildx-plugin docker-compose-pluginsystemctl enable --now dockerdocker run --rm hello-world

Step 03 — Point your domain at the VPS

Create an A record pointing your application domain to the Docker VPS. Caddy needs the domain to resolve correctly before it can obtain an HTTPS certificate.

Type: AName: appValue: your-server-ip

Allow inbound TCP traffic on ports 80 and 443 in the server firewall and your provider's control panel.

Step 04 — Define the Docker stack

Create a project directory:

mkdir -p /opt/docker-appcd /opt/docker-app

Create .env and replace the example value with a long, URL-safe password:

POSTGRES_PASSWORD=replace-with-a-long-random-string

Create Caddyfile:

app.yourdomain.com {    reverse_proxy app:8080}

Create compose.yaml. Replace your-org/your-app:1.4.2 with the image and version used by your application. The older docker-compose.yml filename is still supported.

services:  app:    image: your-org/your-app:1.4.2    restart: unless-stopped    environment:      DATABASE_URL: postgres://app:${POSTGRES_PASSWORD}@db:5432/app    depends_on:      db:        condition: service_healthy   db:    image: postgres:16    restart: unless-stopped    environment:      POSTGRES_DB: app      POSTGRES_USER: app      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}    volumes:      - db-data:/var/lib/postgresql/data    healthcheck:      test: ["CMD-SHELL", "pg_isready -U app -d app"]      interval: 5s      timeout: 5s      retries: 10   caddy:    image: caddy:2    restart: unless-stopped    ports:      - "80:80"      - "443:443"    volumes:      - ./Caddyfile:/etc/caddy/Caddyfile:ro      - caddy-data:/data      - caddy-config:/config volumes:  db-data:  caddy-data:  caddy-config:

Only Caddy publishes ports on the host. The application and database remain available only inside the private Compose network.

Step 05 — Start the stack

Protect the environment file, start the containers, and check their status:

chmod 600 .envdocker compose up -ddocker compose ps

Caddy obtains and renews the HTTPS certificate automatically and redirects HTTP requests to HTTPS. The named volumes keep the database data and Caddy certificates when containers are recreated.

Common Issues

  • The app starts before the database is ready — plain depends_on guarantees start order, not readiness. Give the database a health check and depend on it with condition: service_healthy, as above.
  • Published ports ignore ufw — Docker routes container traffic in the nat table, before the chains ufw uses, so a published port answers even when ufw says it's closed. Publish only the proxy; binding to 127.0.0.1 also publishes the port, it just limits it to the loopback interface.
  • Pulls start failing mid-deploy — Docker Hub allows 100 pulls per 6 hours per IPv4 address or IPv6 /64 subnet without authentication, and 200 per 6 hours on a free Personal account. Run docker login on the server before a deploy that pulls a lot.
  • Data vanished after the container was recreated — data stored in a container's writable layer disappears when that container is removed. Keep persistent data in a named volume or bind mount.

is*hosting infrastructure is a solid base for Docker hosting

Our own hardware

KVM virtualization with dedicated CPU and RAM, so other tenants on the node aren't your capacity planning problem. Root access from the first minute.

40+ locations

Put containers close to the APIs they call or the audience they serve. Every VPS includes a 1Gbps port, with unmetered bandwidth from the Medium plan up.

Uptime, backups, and support

A 99.99% uptime SLA, free weekly backups, and optional daily backups. Engineers are available around the clock through tickets.

Ready to run a VPS with Docker?

Choose a VPS server, install Docker, and bring your stack up. You get root access from the start and full control over every container you run.

Choose Docker VPS

Frequently asked questions about self-hosted Docker VPS

What can I run on a self-hosted Docker VPS?

Docker container hosting supports most software distributed as a Linux container image, including databases, web apps, bots, CI runners, and self-hosted replacements for SaaS tools. Check the image architecture, resource requirements, and any required kernel features before deployment.

How long does it take to install Docker on VPS?

Usually, a few minutes. Docker installs from its official apt repository like any other package on Ubuntu: add the key and repository, install Docker Engine and the Compose plugin, then enable the service. The setup guide above covers the full installation.

Is Docker free?

Docker Engine, the part that runs directly on your Linux VPS, is open source under the Apache License 2.0. Docker Desktop is free for personal use, education, non-commercial open source projects, and small businesses with fewer than 250 employees and less than $10 million in annual revenue. Larger organizations need a paid subscription for Docker Desktop. These Docker Desktop terms don't apply to Docker Engine installed directly on a Linux VPS.

Which is the best VPS for Docker?

Start with the resources required by the containers in your stack. A small service may fit on 1 GB of RAM of a cheap Docker hosting, while an application with a database often needs 2 to 4 GB. Builds, queues, and analytics workloads may require 8 GB or more. Leave enough disk space for images, volumes, and logs, and choose a plan you can scale with the stack as it grows.

Can I run Docker on Windows instead?

Docker Desktop supports compatible 64-bit editions of Windows 10 and Windows 11 with 8 GB of RAM, hardware virtualization, and a supported backend such as WSL 2. It isn't supported on Windows Server. For Linux containers on a VPS, Linux is the more direct option because Docker Engine runs without the Docker Desktop virtualization layer.

Do you offer managed Docker hosting?

Server administration is available as an option when ordering a server with a control panel. Free standard administration covers supported OS, control panel, configuration, and backup tasks. Custom Docker deployments may require paid administration or separate approval, while unmanaged VPS hosting leaves the Docker daemon and container stack under your control.

More from is*hosting

Data Storage

Off-server copies of your Docker volumes, database dumps, and compose files.
Explore
From $1.00 /mo

Dedicated Servers

Move a container-heavy stack to bare metal — for everything a single VPS can no longer keep up with.
Explore
From $75.00 /mo

Recent Posts

  • Mailcow on VPS

    Mailcow on a VPS: Your Own Mail Server Without the Per-Seat Bill

    A full guide to self-hosting email with Mailcow on a VPS: Docker setup, DNS and DKIM records, spam filtering, and webmail, with no per-seat fees to pay.

    UTC 2026-10-01 9 min reading
  • How to Install Ghost on a VPS: Self-Hosting Guide

    How to Install Ghost on a VPS: Self-Hosting Guide

    Install Ghost 6 on a VPS and run your own publication. Native newsletters, Stripe paid tiers, and free SSL, replacing the $29/mo Ghost(Pro) Publisher plan.

    UTC 2026-09-29 8 min reading
  • Nextcloud on VPS: Self-Hosted File Sync Without the Per-Seat Bill

    Nextcloud on VPS: Self-Hosted File Sync Without the Per-Seat Bill

    Installing Nextcloud on a VPS using the official All-in-One method via Docker. From a blank VPS to a working instance in less than 10 minutes.

    UTC 2026-09-22 8 min reading