Qué hace este laboratorio

Portainer resuelve un problema concreto: ver y administrar los contenedores de un host Docker desde el navegador, sin encadenar banderas de docker run. En este laboratorio creamos el directorio de trabajo ~/docker/portainer, escribimos un compose.yaml completo, lo validamos con docker compose config -q y levantamos el stack con docker compose up -d. Después docker compose ps confirma que el contenedor escucha en 0.0.0.0:9443, y solo entonces abrimos https://<IP>:9443 para crear el usuario administrador con una contraseña de 12 caracteres o más; el formulario caduca a los cinco minutos. La versión escrita está en cómo instalar Portainer con Docker Compose.

Un compose.yaml sin sorpresas

El fichero sigue la Compose Specification actual, la que describe la documentación oficial de Docker Compose: sin clave version:, que Compose v2 ya ignora. La imagen va fijada a portainer/portainer-ce:2.40.0 y no a :latest, de modo que reconstruir el stack dentro de seis meses levante el mismo software de hoy. security_opt: no-new-privileges:true restringe lo que el contenedor puede hacer, restart: unless-stopped lo devuelve a la vida tras reiniciar el host y el volumen nombrado portainer_data guarda usuarios y ajustes fuera del contenedor. Se publican dos puertos: 9443 para la interfaz HTTPS y 8000 para el túnel del Edge Agent. El socket /var/run/docker.sock se monta en solo lectura (:ro), porque Portainer lo gestiona todo por API.

Cómo encaja con el resto del stack

Portainer es el panel de control: no sustituye a las demás piezas, las hace visibles. Si además quieres publicar esos contenedores bajo un dominio, el laboratorio de Traefik como proxy inverso con Docker se ocupa del enrutado y Portainer te deja ver qué está enrutando. La interfaz se publica en el puerto 9443 del propio host: en un servidor expuesto a Internet, conviene limitar quién puede llegar a esa dirección. La documentación oficial de Portainer cubre lo que viene después: agentes y entornos remotos. El resto de recorridos reproducibles, en los laboratorios prácticos.

FAQ

¿Qué es Portainer?

Portainer es una interfaz web para gestionar entornos Docker: contenedores, imágenes, volúmenes y redes. Se ejecuta como un contenedor más, aquí con la imagen portainer/portainer-ce:2.40.0, y se comunica con el demonio a través del socket /var/run/docker.sock que le montamos. Su interfaz se sirve por HTTPS en el puerto 9443 del host.

¿Por qué el navegador avisa de que el certificado no es de confianza?

Porque Portainer usa un certificado autofirmado: no lo ha emitido ninguna autoridad reconocida para tu dominio, así que el navegador no puede validarlo. En una instalación local se acepta el aviso y se sigue, que es lo que hacemos aquí. Si vas a exponer la interfaz fuera de la máquina, lo normal es ponerla detrás de un proxy inverso que emita el certificado.

¿Por qué fijar la imagen a 2.40.0 en lugar de usar :latest?

Porque :latest apunta a una imagen distinta cada pocas semanas: el mismo compose.yaml levantaría versiones diferentes en cada máquina y en cada reconstrucción. Con portainer-ce:2.40.0 el resultado es reproducible y actualizar pasa a ser una decisión explícita: cambias la etiqueta, vuelves a levantar el stack y sabes qué versión estrenas.

¿Se pierden los datos al actualizar Portainer?

No, siempre que los datos vivan en el volumen nombrado portainer_data que declara el compose.yaml. Usuarios, ajustes y entornos registrados se guardan en /data dentro del contenedor, que es justo lo que ese volumen persiste. Al cambiar la etiqueta de la imagen y volver a levantar el stack, el contenedor se recrea, pero el volumen sigue donde estaba.