Requisitos de un VPS para Docker
La gracia de Docker es que todo el proyecto (aplicación, base de datos, cola, proxy inverso) se describe en un solo archivo compose.yaml y se muda de un servidor a otro en minutos. Pero al servidor virtual le pide cosas que una web normal en PHP no necesita. En la tabla de arriba ya solo quedan los planes que las cumplen: KVM, desde 2 núcleos, 2 GB de memoria y 30 GB en NVMe, y primero aparecen aquellos en los que el núcleo sale más barato.
Virtualización: por qué KVM
Los contenedores usan mecanismos del kernel de Linux: espacios de nombres, cgroups, puentes de red, iptables. En KVM el VDS tiene su propio kernel, y Docker se instala desde el repositorio oficial sin sorpresas. En OpenVZ y LXC el kernel se comparte con la máquina anfitriona: Docker o no arranca en absoluto, o solo funciona con ajustes especiales del proveedor, con limitaciones de red y versiones antiguas. No merece la pena perder una tarde averiguándolo: elige directamente un VPS con KVM.
El segundo punto es el driver de almacenamiento. Docker usa por defecto overlay2, que necesita soporte de OverlayFS en el kernel. Si no lo hay, Docker recurre al driver vfs, que copia cada capa de la imagen entera: el disco se llena varias veces más rápido y las compilaciones van lentas. Puedes comprobar el driver con el comando docker info justo después de la instalación.
Cuánta memoria necesitan varios contenedores
El propio demonio de Docker ocupa unos 100 MB. A partir de ahí, calcula según la composición del stack:
- Nginx o Caddy: 20–50 MB;
- aplicación en Python, Node.js o PHP-FPM: 100–300 MB por proceso;
- PostgreSQL o MySQL: desde 200 MB, y bastante más bajo carga;
- Redis: decenas de megabytes más el volumen de datos.
Un stack típico «proxy + aplicación + base de datos + Redis» cabe en 1–1,5 GB, así que 2 GB es un mínimo razonable, y para varios proyectos en un mismo servidor es mejor 4 GB de RAM. Pon límites de memoria a los contenedores y añade un archivo de swap: sin eso, un proceso que se dispare tumbará a los demás a través del OOM killer.
Disco: el espacio se va sin que te des cuenta
Las imágenes pesan desde decenas de megabytes hasta un gigabyte, y con cada actualización las versiones antiguas se quedan en el disco. Los logs de los contenedores se escriben por defecto sin límite de tamaño. De ahí tres reglas: configura la rotación de logs en daemon.json (parámetros max-size y max-file), ejecuta de vez en cuando docker system prune y no contrates menos de 30 GB. Si dentro de los contenedores viven bases de datos, fíjate en los planes con NVMe: en escrituras aleatorias la diferencia con un SSD SATA es notable.
Red, seguridad y pago
Una trampa habitual: Docker abre los puertos publicados con -p saltándose UFW, y las reglas del firewall no se les aplican. Vincula los servicios internos a 127.0.0.1 o usa las redes internas de compose. Las descargas desde Docker Hub tienen límites de frecuencia, así que en servidores con muchos despliegues conviene configurar de antemano un espejo del registro. Las formas de pago de cada plan están en la columna «Pago»; los precios se actualizan a partir de los datos de las webs de los proveedores.