VPS Start
₺299.00 / month
- 2 vCPU
- 4 GB RAM
- 80 GB NVMe
- 4 TB Trafik
- 1 IPv4
- Tam root yetkisi
Bring up your web apps, APIs and supporting services with a single Docker Compose command: a KVM-virtualised VPS with NVMe storage and full root access.
Quick answer
Docker hosting means renting a virtual server with full root access on which you can install Docker Engine to run container-based applications. Docker needs the server to have its own kernel, which is why a KVM-virtualised VPS server is the right choice. Your application, database and reverse proxy are defined in a single Docker Compose file, which makes moving and updating the server much easier.
Monthly starting prices in Turkish lira, excluding VAT. You complete the order on our Turkish store page.
₺299.00 / month
₺549.00 / month
₺949.00 / month
₺1,749.00 / month
| Usage | RAM | vCPU | Disk |
|---|---|---|---|
| A few light services (static site, small API) | 2–4 GB | 2 | 40–80 GB |
| Web app + database + cache | 4–8 GB | 2–4 | 80–160 GB |
| Many projects, CI builds | 8–16 GB | 4–6 | 160–320 GB |
| Heavy database and search services | 16 GB or more | 6 or more | 320 GB or more |
Estimates; actual needs depend on mods, plugins and settings.
Docker hosting suits developers who package applications as containers, small software teams, agencies and technical users who want to host their own services. Docker puts an application and all its dependencies into an image, and that image runs on the server exactly as it does on the developer’s computer. The “it worked on my machine” problem largely disappears.
Where a Docker server shines:
If you only host one WordPress site, Docker can be an unnecessary layer; a managed hosting plan is simpler. Docker’s strength is keeping several services and different technology stacks together in an orderly way. Related pages: n8n hosting and Nextcloud hosting.
Docker needs KVM virtualisation because containers share the host’s Linux kernel and want direct access to kernel features such as cgroups, namespaces, the overlay filesystem and network bridges. KVM gives every virtual server its own independent kernel, so Docker uses these features just as on a physical server.
With container-based virtualisation technologies such as OpenVZ or LXC, virtual servers share the host kernel. Docker either cannot be installed there at all or runs in a restricted way that depends on the provider’s special settings; loading kernel modules, using certain network drivers or moving to current Docker versions can cause trouble.
LIONFIN VPS plans run on KVM and offer together:
The resources a Docker server needs are set by the containers you run, not by Docker itself; Docker Engine’s overhead is small. The way to find the right size is to measure the real consumption of each service, add them up and leave room for the operating system and load spikes. The table above is approximate; compare it with the current package table.
General trends by service type:
The docker stats command shows each container’s live memory and CPU use. Define a memory limit in the Compose file so one container cannot consume all memory and affect the others. On the disk side, images, unused layers and log files take up a lot of space over time; choosing a disk slightly larger than you need avoids trouble later.
Install Docker from Docker’s official repository rather than the older version in the operating system’s package repository, then deploy your first project with a Compose file.
sudo rights instead of working as root.docker-compose-plugin package from the official repository; check with docker compose version.compose.yaml and .env files in a folder such as /srv/app.docker compose up -d pulls the images and starts the containers in the background.docker compose ps and logs with docker compose logs -f.A simple example:
services:
app:
image: ghcr.io/company/app:1.4.2
restart: unless-stopped
env_file: .env
depends_on: [db]
db:
image: postgres:16
restart: unless-stopped
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:Specifying images with a version tag instead of latest prevents an unexpected version change when the server restarts.
On a Docker server, domains and SSL are managed by a single reverse proxy placed in front of all applications. The proxy listens on ports 80 and 443, routes each request to the right container by domain name and manages certificates centrally, so no application has to deal with HTTPS itself.
Common options:
| Tool | Key feature | Best for |
|---|---|---|
| Traefik | Reads routing from Docker labels automatically and obtains certificates itself | Services added and changed often |
| Caddy | Simple configuration, automatic HTTPS | A few simple projects |
| Nginx | Fine-grained control, extensive documentation | Custom caching and rules |
| Nginx Proxy Manager | Managed from a web interface | People who prefer to avoid the command line |
Whichever you choose, the flow is the same: create an A record for your domain pointing to the server IP, let the reverse proxy obtain a free Let’s Encrypt certificate and keep application containers on the internal Docker network only. Not publishing application container ports both improves security and prevents port conflicts.
Docker server security rests on hardening SSH, opening only the ports you need, understanding Docker’s firewall behaviour and running containers with least privilege. Docker is convenient, but its defaults are not always the safest settings.
ports:, and these are evaluated before UFW. As a result, a database port you think is closed in UFW may be open to the internet. Do not publish services that must stay private, or bind them to the local address as 127.0.0.1:5432:5432.docker group effectively has root rights; add only accounts you trust.privileged settings.At network level, LIONFIN infrastructure filters DDoS traffic with the RouteFence firewall; configuration inside the server is your responsibility.
The data to back up in Docker lives not inside containers but in persistent volumes and bind-mounted folders; a container itself can be recreated from its image at any time. A proper backup routine covers this persistent data together with the Compose file and configuration.
docker compose exec db pg_dump -U user database > backup.sql.compose.yaml and the source code in Git, and secrets such as .env in an encrypted location.A VPS snapshot gives you an instant copy of the whole server. It is very valuable as a quick rollback point before a big update, but it does not replace application-level database backups. Verify your backups by restoring them regularly in a separate test environment.
Automatic deployment works like this: on every push to the repository the image is built in CI, uploaded to an image registry, and the server pulls the new image and refreshes the container. This removes manual commands on the server and reduces human error.
A typical flow:
docker compose pull and docker compose up -d.For security, the SSH key given to CI should be used only for deployment and, if possible, be command-restricted. Configure registry credentials on the server with a read-only access token.
Tools such as Watchtower can apply image updates automatically, but in production a CI flow where you control when updates happen is more predictable.
Docker Compose is enough for projects made up of a few services on one server; Kubernetes makes sense for large systems spread over several servers that need autoscaling and self-healing. For a small team, Kubernetes’ learning and operating overhead often outweighs its benefits.
| Criterion | Docker Compose | Kubernetes |
|---|---|---|
| Setup and learning | Short | Long |
| Number of servers | Usually one server | Multi-node cluster |
| Autoscaling | No | Yes |
| Resource overhead | Low | Control plane needs extra resources |
| Suitable project | Small and medium projects | Large, distributed systems |
As a middle ground, lightweight Kubernetes distributions such as k3s can run on a single VPS; they are a good start for learning Kubernetes or preparing a project that will later move to a cluster. Docker Swarm is a simpler way to manage several servers with syntax close to Compose files.
Practical advice: start with Compose and consider orchestration when you truly need several servers.
Docker Engine is the open-source core component that runs containers on a server; Docker Desktop is a desktop application for Windows and macOS developer machines; Portainer is a separate tool for managing Docker from a web interface. On a Linux server you need Docker Engine and the Compose plugin; Docker Desktop is not installed on servers.
Command-line management on its own is enough and offers the smallest attack surface. If you use a web interface, run it as a container behind the reverse proxy and restrict access by IP or through a private VPN server.
The most common problems are a full disk, growing log files, port conflicts, DNS issues inside containers and containers restarting because of insufficient memory.
Old images, stopped containers and the build cache grow over time. Check usage with docker system df and clean up with docker image prune and docker builder prune. Make sure you have a backup before using commands that delete volumes.
The default json-file log driver can grow files indefinitely. Define log rotation with the max-size and max-file options in /etc/docker/daemon.json.
Two containers, or a service on the host, are using the same port. Find the owner with ss -tulpn; where possible, do not publish application ports at all and reach them through the reverse proxy.
Read the error with docker compose logs. If the exit code indicates out-of-memory, raise the container’s memory limit or the server’s resources.
Changes to firewall rules may have broken Docker’s network rules. Restarting the Docker service recreates them.
The main points are virtualisation type, root rights, disk speed and size, memory, traffic allowance and flexibility to add resources. If any of these is missing, Docker either will not run or will not perform as expected.
For the operating system, a current Ubuntu LTS or Debian release officially supported by Docker works with the fewest surprises.
Choose a VPS plan
Pick a VPS plan that fits your container load and choose a current Ubuntu LTS or Debian release as the operating system.
Harden the server
Connect with an SSH key, create a sudo user, disable password login and use UFW to open only SSH, 80 and 443.
Install Docker
Install Docker Engine and the Compose plugin from Docker’s official repository and define log rotation in daemon.json.
Set up the reverse proxy
Run Traefik, Caddy or Nginx as a container and obtain Let’s Encrypt certificates for your domains.
Deploy the project
Create the Compose and .env files, start the services with docker compose up -d and check the logs.
Plan backups and updates
Set up a cron script that takes database dumps and volume archives, and update images in a controlled way using version tags.
No. Docker runs smoothly on a virtual server with its own Linux kernel, which a KVM-based VPS provides. On kernel-sharing virtualisation such as OpenVZ or LXC, installing Docker may be restricted or impossible. LIONFIN VPS plans run on KVM.
A current Ubuntu LTS or Debian release officially supported by Docker is the most common and least troublesome choice. Most documentation, community guides and ready-made scripts are written for these distributions. Install Docker from the official Docker repository, not the distribution’s older package.
Docker Engine, used on Linux servers, is open-source licensed and free. Paid subscriptions apply to Docker Desktop used on developer machines at companies above a certain size. On your server you only use Docker Engine and the Compose plugin.
Docker adds its own iptables rules for published ports, and these are evaluated before UFW rules. So a port published with ports may be reachable even though UFW shows it as closed. Bind services that must stay private to 127.0.0.1 only, or do not publish them at all.
Yes. Run each site as a separate Compose project and put a single reverse proxy such as Traefik, Caddy or Nginx in front. The proxy routes each request to the right container by domain name and manages all certificates centrally.
Yes, if the Docker service is enabled to start at boot and the containers have a restart: unless-stopped or always policy. Without that setting, containers stay stopped after a restart. Always specify a restart policy in your Compose files.
Yes, when configured correctly. Keep database data on a persistent volume, do not publish its port, use strong passwords and take regular logical backups. For very busy databases, a server with dedicated resources or a separate database server may perform better.
Yes, lightweight Kubernetes distributions such as k3s can run on a KVM-based VPS. For small single-server projects, however, the complexity and resource overhead of Kubernetes are often unnecessary. Starting with Docker Compose and moving to orchestration when the need arises is more efficient.
With the VPS service, LIONFIN operates and monitors the infrastructure, network and hardware. The operating system, Docker installation, containers and application configuration are under your management with full root rights. You can open a support ticket from the customer panel for infrastructure-related issues.