Portainer: instala y gestiona Docker con interfaz web
Portainer añade una interfaz web a tu Docker sin sustituir la terminal. Aquí tienes cómo instalarlo, configurarlo y sacarle partido en un homelab real.
Esto es para ti si ya tienes Docker pero lo controlas a ciegas
Si llevas un tiempo con Docker sabes que la CLI es potente, pero en cuanto tienes cinco o seis contenedores corriendo empiezan las preguntas: ¿cuál está usando más RAM? ¿Por qué ese contenedor se reinició hace dos horas? ¿Qué variables de entorno tenía el stack que funcionaba la semana pasada? Con comandos es posible averiguarlo todo, pero cuesta tiempo y hay que recordar bastantes flags.
Portainer no te va a hacer olvidar la terminal, ni es la solución para todo. Lo que sí hace es darte una vista de conjunto que desde la línea de comandos tienes que construir tú mismo consulta a consulta: logs en tiempo real, estadísticas de recursos, acceso a la shell de cualquier contenedor y despliegue de stacks desde un editor de docker-compose integrado. Todo desde el navegador, en tu red local.
En este post instalamos Portainer CE desde cero en un host con Docker, vemos qué ocurre cuando montas el socket de Docker (y por qué hay que tenerlo claro), y recorremos las funciones que más uso en el día a día del homelab. Si ya tienes Docker instalado, en veinte minutos tienes todo esto funcionando.
Por qué importa
Despliegue en un comando
Un solo `docker run` con el socket montado y tienes Portainer escuchando en el puerto 9443 vía HTTPS.
Gestión visual de stacks
Sube tu docker-compose.yml directamente desde la UI y Portainer lo despliega como stack versionable.
Logs y terminal integrados
Accede a logs en tiempo real y abre una shell dentro de cualquier contenedor sin salir del navegador.
Socket = privilegios de root
Montar `/var/run/docker.sock` da acceso total al host. No expongas Portainer en red pública sin autenticación robusta.
Por qué una interfaz web tiene sentido (y cuándo no)
Con cuatro contenedores en marcha, la terminal es suficiente. Cuando llevas diecisiete y quieres revisar los logs de tres a la vez sin abrir cinco pestañas de SSH, una UI empieza a tener sentido. Portainer no reemplaza la terminal; añade visibilidad sobre lo que ya está corriendo.
La razón por la que lo uso en mi homelab no es pereza, es contexto. Ver de un vistazo qué contenedores están caídos, cuáles comen más RAM de lo esperado o dónde hay un volumen huérfano lleva segundos desde el navegador y varios comandos desde la CLI.
Dicho esto: si manejas un servidor con cuatro o cinco servicios estables y raramente los tocas, quizás no necesitas instalar nada más. Portainer añade un servicio más que mantener.
Instalar Portainer CE en tu host Docker
La instalación son dos comandos. Primero creas el volumen donde Portainer guardará su configuración, después arrancas el contenedor:
docker volume create portainer_data
docker run -d \
-p 8000:8000 \
-p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
El puerto 9443 es la interfaz HTTPS (con certificado autofirmado por defecto). El 8000 lo usa el protocolo Edge para comunicarse con agentes remotos; si no tienes hosts remotos, puedes omitirlo.
Aviso importante sobre el socket: montar /var/run/docker.sock le da a Portainer acceso equivalente a root en el host. Nadie más que tú debería poder llegar a ese puerto 9443.
Tras unos segundos, abre https://tu-ip:9443 en el navegador, ignora el aviso de certificado autofirmado, crea el usuario administrador y listo.
Primer vistazo: conectar el entorno y orientarte
Al entrar por primera vez, Portainer te pregunta qué entorno quieres gestionar. Para un host local con Docker, selecciona Docker Standalone. Detecta automáticamente el socket que montaste y en unos segundos ves el dashboard principal.
El panel principal te muestra de un vistazo:
- Número de contenedores en marcha y detenidos
- Imágenes descargadas y su tamaño
- Volúmenes y redes activas
- Stacks desplegados
La navegación lateral tiene secciones claras: Containers, Images, Volumes, Networks y Stacks. Todo lo que harías con docker ps, docker images o docker volume ls está aquí en forma de tabla con filtros.
Las acciones del día a día desde la interfaz
Contenedores: arrancar, parar y revisar logs
Desde la vista de contenedores puedes seleccionar uno o varios y arrancarlos, pararlos, reiniciarlos o eliminarlos con el botón correspondiente. Nada nuevo conceptualmente, pero útil cuando necesitas reiniciar cinco servicios de golpe sin encadenar comandos.
Lo que sí ahorra tiempo real son los logs en tiempo real. Haz clic en el nombre del contenedor → pestaña Logs → activa «Auto-refresh». Sin docker logs -f nombre. Y si necesitas entrar al contenedor, la pestaña Console abre una terminal directamente en el navegador; equivale a docker exec -it nombre sh.
Stacks: docker-compose desde la UI
Un stack en Portainer es básicamente un docker-compose.yml gestionado desde el navegador. Puedes pegarlo directamente en el editor, subirlo como fichero o apuntarlo a un repositorio Git.
Por ejemplo, para desplegar un stack de Home Assistant:
- Ve a Stacks → Add stack
- Dale un nombre (por ejemplo,
homeassistant) - Pega o sube tu
docker-compose.yml - Define variables de entorno si las necesitas
- Haz clic en Deploy the stack
Portainer llama a Docker Compose por debajo. Si el YAML tiene errores, los verás en pantalla antes de que se rompa nada. Actualizar el stack más adelante es igual de directo: editas el YAML y pulsas Update the stack.
Stats en tiempo real
Cada contenedor tiene una pestaña Stats que muestra CPU, memoria, red e I/O de disco actualizados en tiempo real. Útil para localizar qué servicio está comiendo recursos sin necesidad de docker stats en terminal.
Gestionar hosts Docker remotos con Portainer Agent
Si tienes más de un host con Docker —una Raspberry Pi, un VPS, otro servidor en la red local— puedes gestionarlos todos desde la misma instancia de Portainer mediante el Portainer Agent.
En el host remoto, arranca el agente:
docker run -d \
-p 9001:9001 \
--name portainer_agent \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
portainer/agent:latest
Después, en tu Portainer principal: Settings → Environments → Add environment → Agent. Introduces la IP del host remoto y el puerto 9001, y en unos segundos aparece como un entorno más. Cambias entre hosts desde el menú desplegable superior del panel.
Asegúrate de que el puerto 9001 no queda expuesto a internet. Lo ideal es que la comunicación ocurra dentro de tu red local o a través de una VPN.
Lo que Portainer no hace (y conviene tener claro)
Portainer CE encaja bien en homelabs, pero tiene límites que vale la pena conocer antes de adoptarlo:
- Sin RBAC avanzado ni SSO: si necesitas gestionar permisos por equipos o integrar con un directorio corporativo, eso es Portainer Business Edition. CE tiene gestión de usuarios básica y nada más.
- No abstrae la complejidad de Docker: si algo falla a nivel de red de contenedores o de volúmenes, seguirás necesitando saber qué comandos mirar. La UI es una capa de conveniencia, no un sustituto del conocimiento.
- Superficie de ataque adicional: Portainer es un servicio más escuchando en red. Si lo expones sin autenticación extra en una IP pública, estás añadiendo un vector con privilegios de administrador sobre Docker.
- No gestiona el host directamente: Portainer solo ve lo que Docker ve. Actualizaciones del sistema operativo, configuración de red del host o gestión de servicios systemd siguen siendo trabajo de SSH.
En mi caso lo tengo detrás de Nginx Proxy Manager con acceso solo desde la red local. Para lo que hace —dar visibilidad rápida sobre mis contenedores—, encaja bien en ese rol.
Preguntas frecuentes
Q: ¿Cómo instalo Portainer en mi servidor Docker?
A: Crea un volumen llamado portainer_data y lanza el contenedor portainer/portainer-ce montando /var/run/docker.sock. Con un solo docker run tienes la UI disponible en el puerto 9443 (HTTPS). El volumen ocupa menos de 100 MB en uso normal.
Q: ¿Qué riesgos tiene montar el socket de Docker?
A: Montar /var/run/docker.sock le da a Portainer privilegios equivalentes a root en el host. Es aceptable en un homelab privado, pero si expones el puerto 9443 a internet sin autenticación fuerte, es una superficie de ataque real. No lo dejes accesible desde fuera sin VPN o firewall.
Q: ¿Vale Portainer CE para un homelab con varios servidores?
A: Sí, con matices. CE permite conectar instancias Docker remotas mediante el Portainer Agent (puerto 9001), así que puedes gestionar varios nodos desde una sola UI. Lo que no tienes en CE es RBAC avanzado ni SSO; eso es exclusivo de Business Edition.
Q: ¿Cuándo tiene sentido usar stacks en lugar de docker run?
A: Cuando tienes varios contenedores que forman un servicio (base de datos + app + proxy), un stack en Portainer es básicamente un docker-compose.yml gestionado desde la interfaz. Te da control de versiones visual y facilita reinicios coordinados, aunque seguir sabiendo qué hace ese compose por debajo sigue siendo útil.
Q: ¿Por qué aprender también la CLI si ya tengo Portainer?
A: Portainer no reemplaza entender Docker: cuando algo falla a las 2 de la mañana o accedes por SSH sin navegador, los comandos docker ps, logs y exec siguen siendo tu mejor herramienta. Portainer agiliza el día a día, pero la CLI es el fallback que siempre funciona.











Deja una respuesta