Docker puede ser complicado, ¿verdad? Líneas de comando interminables, sintaxis que se olvida, y la sensación de que debería haber una forma más fácil. La hay. Se llama Portainer, y es la interfaz web que convierte la gestión de Docker en algo deliciosamente simple.
En esta guía te muestro cómo instalar Portainer en 30 segundos, gestionar todos tus contenedores desde un navegador, y lo mejor: controlar Docker en múltiples servidores remotos sin abrir puertos en tu firewall.
¿Qué es Portainer y Por Qué Usarlo?
Portainer es una interfaz web para Docker que te permite gestionar contenedores, imágenes, volúmenes, redes y stacks (Docker Compose) desde tu navegador. Es gratis, open-source, y ridículamente fácil de instalar.
Ventajas de Portainer vs CLI
- Interfaz visual clara: Dashboard en tiempo real mostrando estado de contenedores, uso de recursos, logs
- Terminal web integrado: Accede a la consola de cualquier contenedor desde el navegador (adiós
docker exec -it
) - Gestión multi-host: Controla Docker en múltiples servidores desde un solo panel
- Editor de stacks integrado: Crea y edita archivos docker-compose.yml con syntax highlighting
- Búsqueda de imágenes: Busca directamente en Docker Hub desde la interfaz
- Control de acceso: Define usuarios y permisos (útil para equipos)
- Sin memorizar sintaxis: Formularios visuales para configurar ports, volumes, networks, restart policies
Lo mejor: Portainer en sí mismo es un contenedor Docker. Se instala con un solo comando y funciona en cualquier lugar donde corra Docker: Linux, Raspberry Pi, WSL en Windows, VPS en la nube, etc.
Instalación de Portainer en 30 Segundos
Voy a mostrarte cómo instalar Portainer en un servidor Ubuntu/Debian desde cero. Si ya tienes Docker instalado, salta al paso 3.
Paso 1: Actualizar Repositorios
sudo apt update
Paso 2: Instalar Docker
Si aún no tienes Docker instalado:
sudo apt install docker.io -y
Verifica que Docker funciona ejecutando un contenedor de prueba:
docker run -d -p 80:80 nginx
docker ps
Deberías ver el contenedor nginx corriendo. Perfecto, Docker funciona.
Nota: Si encuentras problemas con Docker (permission denied, errores de conexión), consulta nuestra guía de troubleshooting Docker que resuelve los problemas más comunes en minutos.
Paso 3: Crear Volumen Persistente para Portainer
Este volumen guardará la configuración de Portainer (usuarios, endpoints, configuración):
docker volume create portainer_data
Paso 4: Instalar Portainer (El Comando Mágico)
Este es el comando completo para desplegar Portainer:
docker run -d \
-p 9443:9443 \
-p 8000:8000 \
--name=portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
¿Qué hace este comando?
-p 9443:9443
: Expone la interfaz web HTTPS en el puerto 9443-p 8000:8000
: Puerto para conexiones con Portainer Agent (gestión remota)-v /var/run/docker.sock:/var/run/docker.sock
: Da acceso a Portainer al socket de Docker (necesario para gestionar contenedores)-v portainer_data:/data
: Monta el volumen persistente--restart=always
: Portainer se reinicia automáticamente si el servidor se reinicia
Verifica que Portainer está corriendo:
docker ps
Deberías ver portainer/portainer-ce
en la lista. ¡Instalación completa!
Configuración Inicial de Portainer
Ahora accede a la interfaz web de Portainer:
- Abre tu navegador y ve a:
https://TU_IP:9443
(reemplazaTU_IP
con la IP de tu servidor) - Verás un aviso de seguridad (certificado autofirmado). Es normal, acepta y continúa
- Crea tu usuario administrador:
- Username: admin (o el que prefieras)
- Password: Usa una contraseña segura
- Desmarca la casilla de telemetría (opcional)
- Haz clic en «Create user»
¡Listo! Verás la pantalla de bienvenida.
Conectar al Entorno Local
Haz clic en «Get Started» (el botón con la ballena azul). Portainer detectará automáticamente el Docker local y lo añadirá como entorno.
Ahora haz clic en el entorno «local» para verlo. Boom. Dashboard completo mostrando:
- Contenedores corriendo y parados
- Imágenes descargadas
- Volúmenes y redes
- Stacks (docker-compose)
Gestionar Contenedores con Portainer
Ver y Controlar Contenedores
En el menú lateral, haz clic en «Containers». Verás todos tus contenedores con:
- Estado: Running, Stopped, Paused
- Puertos expuestos
- Uso de CPU y memoria (en tiempo real si activas las métricas)
Acciones rápidas:
- Start/Stop/Restart: Botones en la columna derecha
- Terminal web: Haz clic en el icono de terminal (>_) → Connect → Estás dentro del contenedor desde tu navegador
- Logs: Ver logs en tiempo real (sin
docker logs -f
) - Inspect: Ver configuración completa del contenedor (JSON)
- Stats: Gráficas de CPU, RAM, I/O en tiempo real
Crear un Contenedor Nuevo
Haz clic en «Add container». Verás un formulario visual para configurar el contenedor:
- Name: Nombre del contenedor (ej:
mi-nginx
) - Image: Puedes buscar en Docker Hub directamente desde aquí. Busca «nginx» y copia:
nginx:latest
- Port mapping: Mapea puertos del host al contenedor
- Host:
8080
→ Container:80
- Host:
- Volumes: Monta directorios o volúmenes
- Network: Elige la red Docker (bridge, host, custom)
- Restart policy: Always, Unless-stopped, On-failure
- Advanced: Variables de entorno, límites de recursos, capabilities
Haz clic en «Deploy the container». Listo. El contenedor se crea y arranca automáticamente.
Accede al terminal: Haz clic en el icono de terminal → Connect. Estás dentro del contenedor sin escribir docker exec
.
Gestión Remota con Portainer Agent
Aquí viene la magia: gestiona Docker en múltiples servidores remotos desde un solo Portainer. Esto es perfecto si tienes:
- Homelab detrás de tu firewall + VPS en la nube
- Varios servidores en producción
- Raspberry Pi ejecutando servicios Docker
Dos Opciones: Agent vs Edge Agent
Portainer Agent (estándar):
- El servidor Portainer se conecta hacia el agent
- Requiere que el puerto 9001 del host remoto sea accesible desde Portainer
- Útil si ambos hosts están en la misma red (LAN, VPN)
Portainer Edge Agent (recomendado para homelabs):
- El agent se conecta hacia el servidor Portainer (conexión inversa)
- No necesitas abrir puertos en tu firewall
- Perfecto para homelabs detrás de CGNAT o firewalls estrictos
- El agent «llama a casa» periódicamente (heartbeat)
Voy a mostrarte cómo instalar el Edge Agent (el más útil).
Instalar Portainer Edge Agent
En el servidor Portainer (el que tiene la interfaz web):
- Ve a «Environments» en el menú lateral
- Haz clic en «Add environment»
- Selecciona «Docker» (el ícono de ballena con bloques)
- Scroll down y haz clic en «Start Wizard»
- Selecciona «Edge Agent»
- Name: Dale un nombre (ej:
homelab
,raspberry-pi
) - Portainer server URL: Deja el valor por defecto (o ajusta si usas dominio personalizado)
- Haz clic en «Create»
Portainer te mostrará un comando Docker para ejecutar en el host remoto. Copia ese comando.
En el servidor remoto (donde quieres gestionar Docker):
Pega y ejecuta el comando que copiaste. Será algo así:
sudo docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
-v /:/host \
-v portainer_agent_data:/data \
--restart always \
-e EDGE=1 \
-e EDGE_ID=xxxxx \
-e EDGE_KEY=yyyyy \
-e CAP_HOST_MANAGEMENT=1 \
--name portainer_edge_agent \
portainer/agent:latest
Eso es todo. El agent se conecta automáticamente al servidor Portainer.
Verificar Conexión
Vuelve a Portainer (interfaz web) → «Environments». Verás el nuevo entorno con:
- Status: Heartbeat (verde = conectado)
- Tipo: Edge Agent
Haz clic en el entorno remoto. Boom. Estás gestionando Docker en ese servidor remoto sin haber abierto ningún puerto.
Puedes:
- Ver todos sus contenedores
- Start/Stop/Restart
- Acceder al terminal web
- Desplegar nuevos contenedores
- Gestionar stacks (docker-compose)
Todo desde un solo panel. Sin SSH, sin VPN complicadas.
Docker Compose con Portainer (Stacks)
Portainer llama «Stacks» a los archivos docker-compose.yml. Es la misma funcionalidad, pero con interfaz visual. Si eres nuevo en Docker Compose, te recomiendo empezar con nuestra guía completa de homelab donde explicamos Docker Compose desde cero.
Desplegar un Stack
- Ve a «Stacks» en el menú lateral
- Haz clic en «Add stack»
- Dale un nombre (ej:
media-server
) - Pega tu archivo
docker-compose.yml
en el Web editor (tiene syntax highlighting)
Ejemplo: Stack con Jellyfin + Sonarr + Radarr
version: '3'
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
ports:
- "8096:8096"
volumes:
- /media/library:/media
- jellyfin_config:/config
restart: unless-stopped
sonarr:
image: linuxserver/sonarr:latest
container_name: sonarr
ports:
- "8989:8989"
volumes:
- sonarr_config:/config
- /media/downloads:/downloads
restart: unless-stopped
radarr:
image: linuxserver/radarr:latest
container_name: radarr
ports:
- "7878:7878"
volumes:
- radarr_config:/config
- /media/downloads:/downloads
restart: unless-stopped
volumes:
jellyfin_config:
sonarr_config:
radarr_config:
- Haz clic en «Deploy the stack»
Portainer despliega los 3 contenedores automáticamente. Verás el stack en la lista con:
- Estado de todos los servicios
- Opción de Stop/Start todo el stack con un clic
- Editor: Edita el docker-compose.yml y redespliega con un botón
Gestionar Stacks Existentes
Si ya tenías un docker-compose corriendo antes de instalar Portainer, aparecerá en la lista de stacks pero no podrás editarlo desde Portainer (fue desplegado externamente).
Solución:
- Para el stack manualmente:
docker-compose down
- Elimina el stack de Portainer (se limpia automáticamente al refrescar)
- Re-despliega desde Portainer (Add stack → pega el docker-compose.yml)
Ahora Portainer tiene control total y puedes editar, parar, iniciar desde la interfaz.
Funcionalidades Avanzadas de Portainer
1. Gestión de Redes Docker
Ve a «Networks» → «Add network». Crea redes bridge personalizadas, define rangos IP, gateways. Todo visual.
2. Gestión de Volúmenes
«Volumes» → Ver todos los volúmenes Docker, eliminar huérfanos, crear nuevos volúmenes con drivers específicos (local, NFS, etc).
3. Búsqueda de Imágenes en Docker Hub
Desde «Images» → «Pull image» → Busca directamente en Docker Hub sin salir de Portainer.
4. Registries Privados
Conecta registries privados (Harbor, GitLab Registry, AWS ECR) en «Registries» → «Add registry».
5. Control de Acceso (RBAC)
Crea usuarios con permisos limitados (solo lectura, gestión de contenedores específicos). Útil para equipos.
6. Plantillas de Aplicaciones
«App Templates» → Despliega aplicaciones populares con un clic: WordPress, MySQL, Redis, Grafana, etc.
Portainer vs Otras Alternativas
Si estás decidiendo entre diferentes soluciones de virtualización/containerización para tu homelab, consulta nuestra comparativa completa Proxmox vs Docker que te ayuda a elegir según tus necesidades.
Herramienta | Ventajas | Desventajas |
---|---|---|
Portainer | Gratis, fácil, gestión multi-host, Edge Agent sin puertos | Funcionalidades avanzadas en versión paga (Business Edition) |
Docker CLI | Nativo, scripting, automatización | Curva de aprendizaje, no visual, difícil para principiantes |
Rancher | Kubernetes + Docker, enterprise-grade | Complejo, overkill para homelabs |
Yacht | Ligero, bonito | Menos funcionalidades, no gestión multi-host |
Dockge | Simple, enfocado en docker-compose | Sin gestión remota, menos maduro |
Veredicto: Para homelabs y pequeños equipos, Portainer es el balance perfecto entre facilidad y funcionalidad.
Consejos y Trucos de Portainer
1. Backup de Configuración
El volumen portainer_data
contiene toda la configuración (usuarios, endpoints, stacks). Haz backup regularmente:
docker run --rm -v portainer_data:/data -v $(pwd):/backup \
busybox tar czf /backup/portainer-backup.tar.gz /data
2. Cambiar Puerto HTTPS
Si el puerto 9443 está ocupado, puedes usar otro al desplegar Portainer:
docker run -d -p 7443:9443 ... portainer/portainer-ce:latest
Accede con: https://TU_IP:7443
3. Usar Certificado SSL Propio
Reemplaza el certificado autofirmado montando tus propios certificados:
docker run -d \
-v /ruta/a/certs:/certs \
-e SSL_CERT=/certs/cert.pem \
-e SSL_KEY=/certs/key.pem \
... portainer/portainer-ce:latest
Acceso remoto seguro: Si quieres acceder a Portainer desde fuera de casa sin abrir puertos, te recomiendo usar Cloudflare Tunnel, que crea un túnel seguro sin necesidad de VPN ni puertos expuestos.
4. Habilitar Métricas de Contenedores
Para ver gráficas de CPU/RAM en tiempo real:
- Ve a «Settings» → «Environments»
- Selecciona tu entorno → «Enable features»
- Activa «Enable host management features»
5. Actualizar Portainer
docker stop portainer
docker rm portainer
docker pull portainer/portainer-ce:latest
# Ejecuta nuevamente el comando de instalación (el volumen persiste los datos)
Casos de Uso Reales
Homelab con Servicios en Raspberry Pi + VPS
- Raspberry Pi: Home Assistant, Pi-hole, Jellyfin
- VPS en la nube: Portainer Server, Nginx reverse proxy
- Setup: Edge Agent en Raspberry Pi → gestión completa desde VPS sin abrir puertos en casa
Desarrollo Multi-Entorno
- Local: Docker Desktop en Mac
- Staging: VPS con Docker
- Producción: Servidor dedicado
- Setup: Portainer gestiona los 3 entornos → despliegue de stacks idénticos en cada uno con un clic
Equipo de Desarrollo con Permisos
- Admin: Control total
- Developers: Solo gestión de contenedores (start/stop/logs), sin eliminar
- QA: Solo lectura y acceso a logs
- Setup: Portainer RBAC con usuarios y roles personalizados
Troubleshooting Común
Portainer no arranca / Puerto 9443 no responde
Verifica que el contenedor está corriendo:
docker ps -a | grep portainer
Si está parado, mira los logs:
docker logs portainer
Problema común: conflicto de puertos. Cambia el puerto en el comando de instalación.
Edge Agent muestra «Heartbeat» rojo
- Verifica conectividad: El host remoto debe poder alcanzar la URL del servidor Portainer
- Firewall: El servidor Portainer debe tener el puerto 8000 abierto (para Edge Agent)
- Tiempo: El Edge Agent tarda ~30 segundos en conectar la primera vez
No puedo editar un stack existente
Si el stack fue creado con docker-compose
externamente, Portainer lo detecta pero no puede editarlo. Solución:
docker-compose down
(para el stack manualmente)- Elimina el stack de Portainer
- Re-despliega desde Portainer (Add stack)
Certificado SSL autofirmado molesta en navegador
Opciones:
- Aceptar el riesgo: Es seguro si es tu servidor
- Usar certificado Let’s Encrypt: Monta tus propios certs (ver Trucos arriba)
- Reverse proxy con Nginx/Caddy: Proxy HTTPS válido → Portainer HTTP interno
Conclusión: ¿Adiós Docker CLI?
Portainer no reemplaza completamente el CLI de Docker (y no debería). Hay tareas avanzadas donde el CLI es más rápido (scripting, automatización con CI/CD). Pero para la gestión diaria: desplegar contenedores, revisar logs, acceder a terminales, gestionar stacks… Portainer es superior.
Mi workflow actual:
- 80% Portainer: Gestión visual, deployments, troubleshooting
- 20% CLI: Scripts automatizados, one-liners rápidos, debugging avanzado
Portainer hace Docker accesible. Si estás empezando con contenedores, o gestionas múltiples servidores, Portainer te ahorrará horas de dolores de cabeza.
Próximos Pasos
- Instala Portainer ahora: Literalmente toma 30 segundos
- Conecta tus servidores remotos: Usa Edge Agent para gestionar homelab + cloud desde un panel
- Migra tus docker-compose a Stacks: Gestión centralizada de todas tus aplicaciones
- Explora App Templates: Despliega WordPress, Grafana, MySQL con un clic
- Configura backups: No pierdas tu configuración de Portainer
¿Usas Portainer o alguna alternativa? ¿Qué funcionalidades te gustaría que agregara? Déjame un comentario.
Artículo creado usando Whisper + RTX 5090: El video original de Techno Tim fue transcrito localmente con Whisper large-v3 en 57 segundos (15.8x realtime), adaptado y expandido al español con ejemplos prácticos y casos de uso.