Cómo instalar Docker en tu VPS: guía paso a paso para Debian/Ubuntu
Aprende a instalar Docker y Docker Compose en tu VPS Debian/Ubuntu paso a paso. Desde el repositorio oficial hasta el primer contenedor y tips de seguridad.
Cómo instalar Docker en tu VPS: guía paso a paso para Debian/Ubuntu
¿Qué es Docker y por qué usarlo en un VPS?
Docker es una plataforma de contenedores que te permite empaquetar aplicaciones con todas sus dependencias en unidades ligeras, portátiles y reproducibles. A diferencia de una máquina virtual, Docker comparte el kernel del sistema operativo anfitrión, lo que lo hace mucho más rápido y eficiente en recursos.
En un VPS, Docker te da superpoderes: puedes levantar una base de datos, un servidor web, una app en Node.js o un CMS como WordPress en segundos, cada uno en su propio contenedor aislado, sin que los procesos se estorben entre sí. Olvídate del clásico "en mi máquina funciona" — con Docker, el entorno es idéntico en desarrollo, staging y producción.
Requisitos previos
Antes de empezar, necesitas:
- Un VPS con **Debian 11+** o **Ubuntu 20.04+**
- Acceso SSH al servidor con un usuario con permisos `sudo`
- Conexión a internet en el VPS
- Conocimientos básicos de línea de comandos
Si todavía no configuraste tu VPS, te recomiendo leer primero la guía anterior: Tu VPS está listo, ¿y ahora qué? Guía de configuración inicial y seguridad.
Paso 1: Actualizar el sistema e instalar dependencias
Conectado por SSH, actualizamos los paquetes del sistema:
sudo apt update && sudo apt upgrade -y
Luego instalamos los paquetes necesarios para que APT pueda descargar paquetes por HTTPS:
sudo apt install -y ca-certificates curlPaso 2: Agregar la llave GPG oficial de Docker
Docker firma sus paquetes con una llave GPG. Así nos aseguramos de que lo que instalamos viene de ellos y no de un origen malicioso:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc> Nota para Debian: si tu sistema es Debian, el URL cambia ligeramente: usa https://download.docker.com/linux/debian/gpg.
Paso 3: Agregar el repositorio oficial de Docker
Con la llave en su lugar, agregamos el repositorio de Docker a la lista de fuentes de APT:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullSi estás en Debian, reemplaza linux/ubuntu por linux/debian.
Actualizamos el índice de paquetes:
sudo apt updatePaso 4: Instalar Docker Engine, containerd y Docker Compose
Ahora sí, instalamos todo lo necesario de un solo tirón:
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginEsto instala:
- **docker-ce**: el motor de Docker
- **docker-ce-cli**: la interfaz de línea de comandos
- **containerd.io**: el runtime de contenedores que Docker usa internamente
- **docker-buildx-plugin**: para construir imágenes multi-arquitectura
- **docker-compose-plugin**: Docker Compose como plugin de Docker (ya no hace falta instalarlo aparte)
Paso 5: Verificar la instalación
Confirma que Docker se instaló correctamente:
sudo docker --versionDeberías ver algo como:
Docker version 27.5.1, build 9f9e3c7
Ahora corre tu primer contenedor:
sudo docker run hello-worldSi ves un mensaje de bienvenida de Docker, ¡todo está funcionando!
Paso 6: Ejecutar Docker sin sudo
Por defecto, Docker requiere sudo para cada comando. Para evitar escribirlo a cada rato, agrega tu usuario al grupo docker:
sudo usermod -aG docker $USERCierra sesión y vuelve a conectarte (o ejecuta newgrp docker) para que los cambios surtan efecto. Después prueba:
docker run hello-worldSin sudo. Si funciona, ya estás listo.
> Advertencia: agregar un usuario al grupo docker es equivalente a darle acceso root sin contraseña. Solo hazlo en entornos donde confíes plenamente en los usuarios del sistema.
Docker Compose: el compañero inseparable
Docker Compose te permite definir y ejecutar aplicaciones multi-contenedor con un solo archivo YAML. Con el plugin que instalamos en el paso 4, ya lo tienes disponible como docker compose.
Crea un archivo compose.yml en un directorio nuevo:
mkdir ~/mi-app && cd ~/mi-app
nano compose.ymlY pega este ejemplo que levanta un sitio web estático con Nginx:
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
restart: unless-stoppedCrea la carpeta html con un archivo de prueba:
mkdir html
echo "<h1>Hola, Docker desde mi VPS 🇨🇴</h1>" > html/index.htmlLevanta la aplicación:
docker compose up -dAhora visita la IP de tu VPS en el navegador. ¡Deberías ver tu mensaje!
Tips de seguridad
Docker es poderoso, pero mal configurado puede abrir brechas de seguridad:
- **No expongas el socket de Docker.** El archivo `/var/run/docker.sock` es el punto de control de Docker. Nunca lo montes dentro de un contenedor a menos que sea estrictamente necesario.
- **Usa resource limits.** Siempre limita CPU y memoria en tus contenedores para evitar que uno solo se coma todos los recursos del VPS:
docker run -d --memory="256m" --cpus="0.5" nginx:alpine- **No corras contenedores como root.** Si el contenedor lo permite, ejecútalo con un usuario no privilegiado usando la directiva `user` en el Dockerfile o en el `compose.yml`.
- **Mantén Docker actualizado.** Docker saca parches de seguridad seguido. Un simple `sudo apt update && sudo apt upgrade` periódico te mantiene al día.
- **Usa imágenes oficiales y con etiqueta fija.** Prefiere `nginx:1.27-alpine` en lugar de `nginx:latest`. Las versiones fijas son reproducibles y evitas sorpresas cuando actualizan la imagen.
- **Habilita el firewall.** Si usas UFW, Docker puede saltarse las reglas. Configúralo correctamente editando `/etc/default/ufw` o usando `iptables` directo.
Checklist final
Usa esta lista para asegurarte de que todo quedó bien:
- [ ] `sudo docker --version` muestra una versión reciente
- [ ] `sudo docker run hello-world` imprime el mensaje de bienvenida
- [ ] Mi usuario está en el grupo `docker` y puedo ejecutar comandos sin `sudo`
- [ ] `docker compose version` muestra la versión del plugin
- [ ] Creé y levanté un contenedor de prueba exitosamente
- [ ] Configuré resource limits en los contenedores que lo requieren
- [ ] No monté el socket de Docker en ningún contenedor sin entender los riesgos
- [ ] Docker está configurado para iniciar con el sistema (`sudo systemctl enable docker`)
Y eso es todo. Con Docker instalado en tu VPS tienes las puertas abiertas para desplegar lo que se te ocurra: APIs, bases de datos, sitios web, bots de Telegram, pipelines de datos y mucho más. En los próximos artículos vamos a explorar cómo orquestar varios servicios con Docker Compose y cómo asegurar tus contenedores en producción. ¡Nos leemos!