Cómo usar Portainer para gestionar contenedores Docker (paso a paso)
Ferramentas & Produtividade · Por Kevin Marcondes · Publicado el · Actualizado el · 9 min de lectura
Esta guía muestra, de forma práctica, cómo usar Portainer para gestionar contenedores Docker: desde la instalación hasta el despliegue de stacks, control de volúmenes y redes, revisión de logs y medidas de seguridad. En pocos pasos tendrás un panel web para operar tus entornos locales o remotos con más seguridad y menos comandos.
Qué es Portainer y cuándo es útil
Portainer es un panel web que simplifica la administración de entornos Docker. Reduce errores en tareas operativas y estandariza despliegues mediante la interfaz o stacks (Compose).
Es útil cuando tu equipo necesita:
- Visualizar contenedores, volúmenes y redes de forma centralizada.
- Estandarizar despliegues con Compose, sin depender únicamente de la CLI.
- Gestionar múltiples hosts locales y remotos.
Si aún evalúas cuándo usar contenedores en lugar de máquinas virtuales, consulta un comparativo práctico: Docker vs máquinas virtuales para HA.
Prerequisitos y entorno de prueba
Antes de empezar, asegura lo siguiente:
- Un host con Docker Engine instalado y acceso sudo.
- Puertos de red abiertos: 9443/TCP para la UI; 9001/TCP para el Agent remoto.
- Navegador actualizado para acceder al panel web.
- Opcional: un segundo host Docker para probar el Agent remoto.
Atención: mapear el archivo /var/run/docker.sock a containers otorga acceso administrativo al Docker. Usa esto solo en hosts de confianza y aplica controles de acceso en la red y en el sistema.
1) Instalar Portainer CE en el host Docker
La instalación mínima usa un volumen persistente para los datos de Portainer y publica la interfaz segura en el puerto 9443. Requiere acceso root o sudo.
Ejecuta los comandos abajo en el host que ya tenga Docker. Espera a que el container inicie y comprueba que el puerto 9443 esté accesible en tu red local.
# 1) Criar volume persistente para dados do Portainer
sudo docker volume create portainer_data
# 2) Subir o Portainer CE com HTTPS (9443)
sudo docker run -d \
-p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
# 3) Verificar status
sudo docker ps --filter name=portainer
# Acesse https://SEU_HOST:9443 no navegador (certificado pode ser autoassinado).
2) Primer acceso y creación del usuario administrador
Accede a https://SEU_HOST:9443 en el navegador. En la primera pantalla, define el usuario y la contraseña del administrador.
A continuación, elige el tipo de entorno a gestionar. Para comenzar, selecciona el propio Docker local (Local). Verás el dashboard con contenedores, imágenes, volúmenes y redes.
Buenas prácticas iniciales:
- Crea una contraseña fuerte y guárdala en un gestor de contraseñas.
- Desactiva puertos públicos que no vayan a usarse. Prefiere exponer vía VPN o túnel seguro.
- Crea tags y grupos de entornos para organizar hosts.
3) Conectar hosts remotos con el Portainer Agent
Para gestionar servidores Docker remotos, instala el Portainer Agent en cada host y conéctalos desde el panel. Abre el puerto 9001/TCP en el firewall y garantiza que solo Portainer pueda acceder a él.
En el host remoto, ejecuta el Agent. Después, en Portainer, agrega un nuevo entorno del tipo Agent e indica la dirección del host remoto:9001.
# No host REMOTO (com Docker instalado)
sudo 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
# Após subir, no Portainer UI: Environments > Add environment > Agent
# Informe: tcp://IP_DO_HOST_REMOTO:9001
4) Despliegue de contenedores y stacks (Compose)
Puedes levantar contenedores individuales o stacks usando archivos Compose. Los stacks facilitan el versionado y la replicación entre entornos.
Flujo común:
- Crear una stack, pegar el YAML del Compose, ajustar variables y desplegar.
- Parametrizar variables con .env y Secrets.
- Validar logs y el estado de salud del servicio tras el despliegue.
La siguiente tabla ayuda a localizar acciones típicas en la UI y su equivalente conceptual en la CLI.
| Tarea | Dónde en la UI | Equivalente en la CLI |
|---|---|---|
| Subir container único | Containers > Add container | docker run |
| Subir stack Compose | Stacks > Add stack | docker compose up -d |
| Mapear puerto/volumen | Form de container/stack | -p / -v |
| Ver logs | Container > Logs | docker logs -f |
| Reiniciar/escalar | Container/Stack > Actions | docker restart / compose scale |
# Exemplo de stack (Compose v3+): Web + Redis
a version: "3.8"
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- web_content:/usr/share/nginx/html:ro
depends_on:
- cache
cache:
image: redis:7-alpine
command: ["redis-server", "--appendonly", "yes"]
volumes:
- redis_data:/data
volumes:
web_content: {}
redis_data: {}
Volúmenes, redes, variables y seguridad en la práctica
Volúmenes: prefiere volúmenes con nombre para persistencia. Para backup, copia los datos fuera del host o comprime el volumen periódicamente.
Redes: usa redes bridge personalizadas por proyecto para aislar el tráfico entre servicios. Evita compartir redes sin necesidad.
Variables y secrets: almacena credenciales como Secrets y usa variables de entorno para parámetros. No incluyas contraseñas dentro de la imagen.
Seguridad:
- Restringe el acceso a la UI (9443) mediante VPN, lista blanca de IPs o proxy inverso.
- Activa HTTPS y evita exponer el puerto 9001 públicamente.
- Revisa quién puede tocar el Docker socket y el host.
Automatización: tras dominar lo básico, conecta tus despliegues a pipelines de CI/CD. Consulta un guía práctico: CI/CD con GitHub Actions (PHP/Laravel) para adaptar al stack.
Los logs estructurados ayudan mucho en el diagnóstico. Si aún no estandarizas logs, revisa el guía de logs estructurados (JSON) y correlación.
# Exemplos úteis (executar no host conforme seu ambiente)
# Backup simples do volume do Portainer (gera arquivo no diretório atual)
sudo docker run --rm \
-v portainer_data:/data \
-v "$(pwd)":/backup \
alpine sh -c "tar czf /backup/portainer_data.tgz -C / data"
# Atualizar o Portainer mantendo os dados
sudo docker pull portainer/portainer-ce:latest
sudo docker stop portainer && sudo docker rm portainer
sudo docker run -d -p 9443:9443 \
--name portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Verificación del entorno y resolución de problemas comunes
Tras instalar y configurar, valida que todo esté saludable:
- La UI abre en https://SEU_HOST:9443 sin errores críticos.
- Ves contenedores, volúmenes y redes del host Local.
- El Agent remoto aparece en Environments con estado up.
- Los logs del container de prueba no muestran fallos recurrentes.
Problemas comunes y correcciones:
- Puerto 9443/9001 bloqueado: ábrelos en el firewall y en el proveedor.
- Permisos en el Docker socket: el proceso necesita acceso a /var/run/docker.sock.
- DNS y pull de imágenes: revisa la red externa del host.
- Certificado auto-firmado: añade una excepción temporal o usa un proxy con TLS válido.
- En WSL2/desktop, confirma la IP correcta del host.
Para madurar operaciones y auditar cambios de despliegue, vale la pena estudiar procesos y checklists como los discutidos en auditoría de procesos de deploy.
# Verificações rápidas
sudo docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | sed -n '1,10p'
# Logs do Portainer (últimas 100 linhas)
sudo docker logs --tail=100 portainer
# Testar conectividade com Agent remoto (da máquina do Portainer)
# Substitua IP_PEER pelo endereço do host remoto
nc -vz IP_PEER 9001 || telnet IP_PEER 9001 || echo "Falha na conexão"
Preguntas frecuentes
¿Puedo usar Portainer en producción?
Sí, Portainer se usa en entornos de operación, pero su adopción en producción depende de tus requisitos de seguridad y gobernanza. Antes de desplegarlo ampliamente, restringe el acceso a la UI (9443), aplica HTTPS y controles de red, prueba la configuración en un entorno de homologación y revisa permisos sobre el Docker socket y los hosts para minimizar riesgos operativos.
¿Portainer sustituye a docker-compose?
No reemplaza docker-compose: Portainer orquesta stacks basados en archivos Compose y facilita desplegarlos desde la interfaz. Sigues manteniendo el mismo YAML de Compose; la ventaja es poder visualizar, parametrizar y versionar stacks desde el panel, lo que reduce fricción operativa sin cambiar el formato y la definición que ya usas con docker-compose.
¿Cómo proteger el acceso al Docker socket?
Evita exponer /var/run/docker.sock por la red y monta el socket solo localmente para Portainer cuando sea necesario. Limita quién puede acceder al host, aplica el principio de menor privilegio, mantiene el sistema actualizado y audita cuentas y credenciales. Para entornos expuestos, usa controles de red (VPN, listas blancas) y revisa regularmente qué procesos tienen acceso al socket.
¿Necesito Kubernetes para usar Portainer?
No, no necesitas Kubernetes: Portainer gestiona Docker puro de forma completa y permite administrar contenedores, volúmenes y redes. Si en el futuro migras a Kubernetes, Portainer también puede integrarlo, pero empezar y operar únicamente con Docker es totalmente válido y soportado por la herramienta descrita en la guía.
¿Cómo hago backup de los datos de Portainer?
Los datos de Portainer se guardan en el volumen mapeado en /data. Haz copias periódicas de ese volumen hacia almacenamiento externo o utiliza un contenedor temporal para compactarlo y exportarlo. Programa backups regulares y valida las restauraciones en un entorno de prueba para asegurarte de que los datos y la configuración se recuperan correctamente.
¿Es posible integrar con CI/CD?
Sí. Puedes automatizar despliegues de stacks desde pipelines que actualicen imágenes y reinicien servicios o actualicen la definición del stack. Planifica el manejo de variables y secrets, la promoción entre entornos y pruebas automatizadas. La integración facilita actualizaciones reproducibles siempre que tus pipelines gestionen correctamente las credenciales y la orquestación del despliegue.
¿Listo para operar tus contenedores con menos fricción?
Sigue el paso a paso, prueba en un entorno aislado y evoluciona con logs estructurados, backups y automatización de despliegues. Comienza hoy con el entorno local y conecta tus hosts remotos con el Agent.
Revisar comandos e iniciar ahoraVer también
- Tutorial: implementar Canary releases con Traefik en Docker Compose usando headers y weighted routing para despliegues graduales de aplicaciones PHP
- Tutorial: configurar HAProxy con Let's Encrypt y healthchecks para balanceo de tráfico entre contenedores Docker en VPS (paso a paso)
- Tutorial práctico: implementar mTLS entre Nginx y microservicios usando smallstep CA en Docker Compose
- Tutorial: configurar cgroup v2 y systemd ResourceControl para limitar CPU, memoria e I/O de contenedores Docker en Debian