En la web hemos hablado largo y tendido sobre los contenedores Docker. En el caso de hoy hablaremos de Portainer. Se trata de una interfaz de usuario web que nos permite administrar fácilmente nuestro host Docker y todos los contenedores que en él habitan.
Portainer tiene como una de sus ventajas principales su facilidad de uso. Consiste en un solo contenedor que puede ejecutarse en cualquier motor de Docker, tanto en GNU/Linux como en otros sistemas, como Microsoft Windows.
Con esta herramienta podemos administrar las pilas de Docker, los contenedores, las imágenes, volúmenes y redes. Es compatible con Docker CE, Docker EE y Docker Swarm.
Despliegue de Portainer
Ya hemos dicho que el producto se encuentra dentro de un contenedor así que podemos desplegarlo igual que cualquier otro Docker.
docker volume create portainer_data docker run -d -p 9000:9000 --name portainer --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data portainer/portainer
Podemos indicarle a Docker un volumen, seleccionado por nosotros, donde se guardará la información:
docker run -d -p 9000:9000 --name portainer --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /path/on/host/data:/data portainer/portainer
Otra opción interesante, que es la que he utilizado yo, es usar Docker Compose, herramienta de la que ya hablamos en otro artículo.
Antes de continuar quiero comentar que, para que los datos sean permanentes al apagar y encender el contenedor, he utilizado un recurso NFS, exportado desde una cabina NAS de la marca Synology que tengo por casa. He montado el recurso sobre el FS /var/lib/docker/volumes.
Si tenéis dudas respecto al almacenamiento en Docker podéis consultar el artículo que escribí sobre este sistema de contenedores dentro de esta misma serie.
Una vez aclarado esto, utilizaremos la plantilla de guión incluida en la documentación oficial, que es esta:
version: '2' services: portainer: image: portainer/portainer ports: - "9500:9000" command: -H unix:///var/run/docker.sock volumes: - /var/run/docker.sock:/var/run/docker.sock - portainer_data:/data volumes: portainer_data:
Guardamos el fichero con el nombre docker-compose.yml y ejecutamos:
docker compose up -d
Esto lo debemos ejecutar en la misma ruta donde tengamos el fichero con extensión YML.
En el fichero, además, indicamos el puerto que utilizará el contenedor. Debe estar accesible en el host. En mi caso estoy utilizando Centos 7, por lo que, para abrir dicho puerto, escribiremos:
firewall-cmd --permanent --add-port=9500/tcp firewall-cmd --reload
NOTA: En la plantilla viene por defecto el puerto 9000 pero yo lo estoy utilizando para otro servicio web. Por eso, en la exposición, le indico que se redirija hacia el 9500.
Respecto al asunto de la exposición de puertos también tenéis un artículo ya escrito sobre el tema en Colaboratorio.
Si todo ha ido bien veremos el contenedor funcionando:
[root@servicinga davidochobits]# docker-compose up -d Creating davidochobits_portainer_1 ... done
Comprobamos la información que nos muestra el comando docker ps
, así:
[root@servicinga davidochobits]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ef9e141a5af6 portainer/portainer "/portainer -H unix:…" About a minute ago Up About a minute 0.0.0.0:9500->9000/tcp davidochobits_portainer_
Así que ya podemos escribir en el navegador web la dirección IP de nuestro equipo o servidor más el puerto indicado.
Configuración de Portainer
Al acceder vía web por primera vez nos pedirá configurar la contraseña del usuario administrador, tal y como se muestra en la imagen:
La contraseña debe tener, por lo menos, ocho caracteres.
Una vez ya hemos configurado esa parte, en el siguiente paso ya podemos ver la interfaz de Portainer propiamente dicha.
Vemos en la imagen que solo tenemos un nodo de Docker, que es el primario. Además, nos da la información de sus volúmenes, imágenes y contenedores, tanto los que están parados como los que funcionan.
Si marcamos sobre el nodo primario se nos mostrará el siguiente panel de control:
La verdad es que este producto da mucho juego. Podemos gestionar prácticamente todas las operaciones: descargar imágenes, crear contenedores, gestionar volúmenes, redes, puertos…
Para mostrar brevemente su funcionamiento nos podemos descargar una plantilla de contenedor ya predefinida desde «Add Templates«. En el ejemplo vamos a utilizar la plantilla para instalar la popular herramienta de control de versiones GitLab.
Una vez seleccionada y elegido el nombre le debemos asignar una red, volúmenes y los puertos que expondremos. En mi caso, el puerto 80 lo he redireccionado al 9080 y lo mismo con el resto, el 443 al 9443 y el 22 al 9022.
Una vez desplegado, el contenedor es visible en el apartado «Containers»
Para acceder al nuevo contenedor sería, en mi caso: http://ip-de-servidor-virtual:9080, con el resultado:
Desde el propio apartado de «Containers«, justo en la línea con la información del contenedor en cuestión, podemos ver sus estadísticas marcando sobre el símbolo de la gráfica.
Y con esto lo dejamos por hoy. Quedan muchas más cosas en el tintero. No sé si haré una segunda parte al respecto. Si tenéis interés en que continúe hablando de Portainer podéis pedirlo en los comentarios.
Fuentes consultadas:
Imagen de portada: Pixabay