Docker Compose en VPS: entorno de desarrollo seguro

Docker Compose en VPS

📅 Publicado el 22 de septiembre, 2026 · Por Equipo RedServicio

Levantar tu pila de aplicaciones con Docker Compose en un VPS se ha vuelto casi el estándar entre desarrolladores y webmasters que quieren un entorno seguro, reproducible y que no se rompa cada dos por tres. La alternativa —instalar servicios directamente sobre el sistema operativo del servidor— funciona, sí, pero a cambio de conflictos de dependencias y configuraciones frágiles que dan guerra justo cuando menos conviene. Con Docker Compose defines toda la pila (web, base de datos, caché y lo que haga falta) en un único fichero YAML y la levantas con un comando. Aquí te cuento paso a paso cómo montarlo, con ejemplos reales y alguna recomendación de seguridad que sirve tanto en desarrollo como en producción. Y si lo que buscas es un VPS con acceso root, recursos garantizados y soporte 24/7, en RedServicio hay planes pensados exactamente para este escenario.

¿Por qué usar Docker Compose en VPS para tu desarrollo?

Frente a un entorno tradicional, la diferencia se nota desde el primer día:

  • Aislamiento total: cada servicio (Nginx, PHP, MySQL, Redis) corre en su propio contenedor. Se acaban los conflictos de versiones y dependencias.
  • Reproducibilidad: el fichero docker-compose.yml describe todo el entorno. Cualquiera del equipo clona el proyecto y obtiene exactamente la misma configuración. Exactamente la misma.
  • Despliegues rápidos: pasar de desarrollo a producción es copiar el fichero de configuración y ejecutar docker compose up -d. Nada más.
  • Seguridad mejorada: los contenedores limitan la superficie de ataque; si un servicio se compromete, el daño queda contenido.
  • Eficiencia de recursos: a diferencia de las máquinas virtuales, los contenedores comparten el kernel del host y consumen bastante menos memoria y CPU.

Consejo: para una pila completa (web + base de datos + caché), lo mínimo razonable es un VPS con 2 GB de RAM y 2 vCPU. En RedServicio puedes escalar recursos en caliente, sin reinstalar nada.

Requisitos previos e instalación de Docker y Docker Compose

Necesitas poco: un VPS con Ubuntu 22.04 o superior (Debian 11+ también vale), acceso por SSH con un usuario con privilegios sudo y el firewall básico ya configurado. Los pasos de instalación son estos:

  1. Actualiza el sistema: ejecuta sudo apt update && sudo apt upgrade -y.
  2. Instala Docker desde el repositorio oficial: la vía más fiable es el script oficial:

    curl -fsSL https://get.docker.com | sh

  3. Añade tu usuario al grupo docker para no tener que teclear sudo en cada comando: sudo usermod -aG docker $USER. Cierra sesión y vuelve a entrar para que el cambio surta efecto.
  4. Verifica la instalación: en las versiones recientes, Docker Compose ya viene integrado como plugin. Compruébalo con docker compose version.

Nota de seguridad: no expongas el socket de Docker (/var/run/docker.sock) a internet ni lo montes en contenedores de terceros. Es, literalmente, dar acceso root a tu servidor.

Estructura del proyecto y fichero docker-compose.yml explicado

Una estructura de proyecto limpia ahorra quebraderos de cabeza después. Para una web en PHP, algo así funciona bien:

mi-proyecto/ ├── docker-compose.yml ├── .env ├── nginx/ │ └── default.conf ├── src/ │ └── index.php └── db_data/

El corazón de todo es el fichero docker-compose.yml. Aquí va un ejemplo funcional, comentado:

services:

web:

image: nginx:latest

ports:

– «8080:80»

volumes:

– ./src:/var/www/html

– ./nginx/default.conf:/etc/nginx/conf.d/default.conf

depends_on:

– php

php:

image: php:8.3-fpm

volumes:

– ./src:/var/www/html

db:

image: mysql:8.0

environment:

MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}

MYSQL_DATABASE: ${DB_NAME}

volumes:

– ./db_data:/var/lib/mysql

Hay cuatro detalles que conviene entender bien:

  • services: cada bloque define un contenedor independiente de la pila.
  • volumes: montan tu código local dentro del contenedor, así los cambios se reflejan al instante, sin reconstruir imágenes.
  • environment + .env: las credenciales viven en un fichero .env que debes excluir del control de versiones añadiéndolo al .gitignore. Parece obvio, pero sigue habiendo filtraciones por esto.
  • depends_on: garantiza el orden de arranque entre servicios relacionados.

Con el fichero guardado, ejecuta docker compose up -d y en segundos tendrás el entorno operativo, accesible en el puerto 8080 de tu VPS.

Seguridad del entorno: redes internas, variables de entorno y permisos

Hay un error que veo una y otra vez en despliegues de Docker Compose sobre VPS: puertos expuestos de más. Si tu WordPress necesita hablar con la base de datos, que MariaDB escuche hacia fuera no aporta nada. Y sí, es un riesgo real. La solución pasa por una red interna: quita la directiva ports del servicio de base de datos y declara en el docker-compose.yml una red sin acceso externo:

networks: internal: driver: bridge internal: true — y asigna internal tanto al servicio db como al de WordPress. Solo el que necesite salir a internet (el frontend) debería colgarse de una red adicional marcada como pública.

  • Firewall del VPS: aunque Compose gestione las redes, no bajes la guardia. UFW o el firewall del proveedor, y poco más que 22, 80 y 443.
  • Variables de entorno: contraseñas generadas (openssl rand -base64 24) en el fichero .env, con permisos restrictivos: chmod 600 .env.
  • Imágenes oficiales y actualizadas: desconfía de imágenes de terceros poco mantenidas y fija versiones concretas (mariadb:11.4) en lugar de latest.
  • Usuarios no root: en tus Dockerfiles, añade USER appuser. Que los contenedores no corran con privilegios máximos.

Falta algo. HTTPS en la capa frontal, mediante un proxy inverso como Nginx o Caddy, para que todo el tráfico hacia tu VPS viaje cifrado.

Buenas prácticas: volúmenes, límites de recursos y actualizaciones

Que el despliegue aguante el paso del tiempo depende de tres detalles que, en el primer despliegue, casi nadie mira.

Volúmenes nombrados para datos críticos

Para bases de datos, volúmenes nombrados y no bind mounts: db_data: declarado en la sección volumes y montado como db_data:/var/lib/mysql. Así los datos sobreviven a las reconstrucciones de contenedores. Los bind mounts déjalos para código en desarrollo, donde quieres ver los cambios al instante.

Límites de recursos por servicio

En un VPS compartido, un contenedor desbocado puede tumbar toda la máquina. Te lo digo por experiencia ajena, pero dolorosa. Añade a cada servicio:

  • deploy.resources.limits.memory: 512m para que la base de datos no se coma toda la RAM.
  • cpus: «0.50» para acotar el procesador.
  • restart: unless-stopped, de modo que los servicios se levanten solos tras un reinicio del VPS.

Rutina de mantenimiento

  1. Actualiza imágenes con docker compose pull y después docker compose up -d.
  2. Cada pocas semanas, limpia recursos huérfanos con docker system prune -af (ojo: esto borra también imágenes sin usar).
  3. Vigila consumo con docker stats y logs con docker compose logs -f nombre_servicio.
  4. Copia de seguridad de los volúmenes, por ejemplo con un contenedor temporal que comprima /var/lib/docker/volumes hacia almacenamiento externo.

Conclusión: un entorno Docker Compose en VPS listo y seguro

Docker Compose en VPS te da lo mejor de ambos mundos: la reproducibilidad de los contenedores y el control total de un servidor propio. Con un docker-compose.yml bien estructurado, redes internas que aislan la base de datos, variables sensibles fuera del control de versiones, volúmenes persistentes y límites de recursos, el entorno queda listo para desarrollo y para producción con una seguridad razonable. Y fácil de mantener, que también cuenta.

¿El paso siguiente? Automatizar. Un script sencillo que ejecute pull, up -d y prune tras cada cambio en tu repositorio ya te acerca a un CI/CD casero sin complicaciones. Y si lo tuyo es el código y no la administración del servidor, en RedServicio.net tienes VPS con acceso root, soporte técnico 24/7 y una infraestructura pensada para que tus contenedores rindan desde el primer día.

📝

Equipo RedServicio

Artículos escritos y revisados por nuestro equipo técnico especializado en hosting e infraestructura web en España.

¿Listo para un hosting de verdad?

Servidores en España · Soporte 24/7 en español · Migración gratuita

Ver Planes desde 3,95€/mes →

Te puede interesar:

Página Gratis — Crea tu web gratis

Clisec — Seguridad informática

Scroll al inicio