Portainer es una herramienta ligera y open-source de gestión de contenedores sobre Docker (o Docker Swarm). Portainer ofrece una interfaz gráfica para gestionar el host Docker desde cualquier navegador, tiene soporte para Raspberry Pi y se puede desplegar como un simple contenedor.

Espero que este artículo ayude a todos aquellos que tengan ganas de probar Portainer y evitarles los problemas que me he encontrado yo.

He estado buscando algún tipo de solución gráfica para monitorizar las Raspberry Pi ya que, por algún motivo, los nodos worker del clúster de Kubernetes se cuelgan.

Buscando alguna solución de monitorizado he encontrado Portainer referenciado en el blog de Hypriot: Visualize your Raspberry Pi containers with Portainer or UI for Docker.

Portainer no es una herramienta de monitorizado (a nivel de host), sino que está enfocada a la visualización básicamente del estado de los contenedores de uno (o varios) endpoints Docker (o Docker Swarm). Sin embargo, ofreciendo soporte para ARM y estando disponible en forma de contenedor, no había motivo para no probarlo ;)

Soporte para ARM

En el apartado para obtener Portainer de la web, sólo se indica el comando:

docker run -d -p 9000:9000 portainer/portainer

Por muy minimalista que quiera ser la página, la verdad es que no les hubiera costado nada indicar que existen diferentes versiones disponibles de la imagen (como por ejemplo, la que proporciona soporte para ARM).

Además, lanzando el comando tal cual, si quieres configurar Portainer para monitorizar el nodo local, no funcionará (requiere montar /var/run/docker.sock en el contenedor).

El artículo de Hypriot apunta a una imagen llamada portainer/portainer:arm, que ya no existe en DockerHub. Revisando las etiquetas disponibles para las imágenes de Portainer, encontramos:

TagName                Compressed Size    Last Updated
ppc64le                  4 MB             16 days ago
demo                     4 MB             23 days ago
latest                   0 B              23 days ago
1.12.4                   0 B              23 days ago
windows-amd64          337 MB             23 days ago
windows-amd64-1.12.4   337 MB             23 days ago
linux-arm64              4 MB             23 days ago
linux-arm64-1.12.4       4 MB             23 days ago
linux-arm                4 MB             23 days ago
linux-arm-1.12.4         4 MB             23 days ago
linux-amd64              4 MB             23 days ago
linux-amd64-1.12.4       4 MB             23 days ago

Seleccionamos la versión adecuada para nuestra Raspberry Pi y la descargamos mediante:

$ docker pull portainer/portainer:linux-arm-1.12.4
linux-arm-1.12.4: Pulling from portainer/portainer
a3ed95caeb02: Pull complete
802d894958a2: Pull complete
30fb5c96d238: Pull complete
Digest: sha256:5269fd824014fac1dee29e2cf74aa5c337cf5c0ceb7cae2634c1e054f5e2763f
Status: Downloaded newer image for portainer/portainer:linux-arm-1.12.4
$

A continuación he lanzado la creación del contenedor usando:

$ docker run -d -p 9000:9000 --name portainer portainer/portainer:linux-arm-1.12.4
d5ad5764788a932cd19942dcb0e70471101173c8d14801b0ce7c172ef9ac72ff
$

Acceso a Portainer

Abre un navegador y accede a http://IP-nodo:9000/.

La primera vez que accedes a la URL de Portainer debes introducir el password del usuario admin.

Una vez introducido, puedes acceder a la UI de gestión de Portainer.

Para mostrar información sobre los contendores (imágenes, volúmenes, etc) en Docker, Portainer necesita conectarse -vía API- al host en el que corre Docker. Tenemos dos opciones, un endpoint remoto (opción por defecto) o conectar con el host donde corre Portainer:

El problema es que, como vemos, al seleccionar un endpoint local, se indica que hay que lanzar el contenedor de Portainer dando acceso al contenedor sobre /var/run/docker.sock:

Como este detalle no se indica en ningún sitio hasta que estás intentando configurar Portainer, lo más probable es que no hayas lanzado el contenedor con el volumen necesario.

Así que es necesario detener el contenedor -y eliminarlo, si quieres reusar el nombre- y volver a lanzar el proceso de configuración.

No son más que unos pocos comandos en Linux (o en tu Mac), pero sin duda es una molestia que podría evitarse dando algo más de información. Mucho más grave es si el sistema operativo de tu host es Windows, ya que esta opción no está disponible.

$ docker stop portainer
portainer
$ docker rm portainer
portainer

Acceso a Portainer (segundo intento)

Lanzamos el contenedor de Portainer montando docker.sock y pasamos por los mismos pasos que en intento anterior:

$ docker run -d -p 9000:9000 --name portainer -v "/var/run/docker.sock:/var/run/docker.sock" portainer/portainer:linux-arm-1.12.4
3f0ad98393ed5c67cda864737d83fe098a13d1317e1f6c299419ab1a3c1d153c

Después de validarnos, podemos conectar con el docker-engine local y visualizar el dashboard:

Desde la interfaz web podemos gestionar los contenedores, imágenes y volúmenes existentes:

Contenedores.
Imágenes.
Volúmenes.

En el próximo artículo me concentraré en usar Portainer para realizar la gestión de Docker.