Gestión de contenedores Docker con portainer

Portainer es un interfaz ligero de usuario gestión de contenedores docker. Recordad que ya hablamos de Docker en el capítulo número 25 y además escribí un post sobre red en docker.

El software se puede usar sin problema, pero ojo, la licencia tiene copyright, aunque en la página ponga en una sección open source, sólo hay que leer el license.txt, aunque ahí pone expresamente que se puede quitar la licencia, que se puede usar para entornos comerciales o no y lo único que te piden es indicar que el software es portainer, es un poco extraño porque esto es como una creative commons, pero bueno, no vamos a profundizar en este asunto ahora tampoco, lo importante es que se puede usar y hay que mencionar portainer si se hace alguna modificación.

Portainer dicen que funciona en Windows, Linux y Mac, obviamente en mi caso sólo lo he probado en Linux y os voy a contar mis experiencias con el.

Antes de descargarlo a mi me gusta ir a la documentación a ver si es completa o no y en este caso está muy bien, podéis verla en https://portainer.readthedocs.io/en/stable/

Pero bueno, vamos al grano y vamos a ver cómo se instala y qué podemos hacer con esto. Lo primero va a ser instalar docker, si no lo tenéis instalado podéis hacerlo con:

sudo apt install docker.io

En mi caso uso KDE Neon que es una derivada de Ubuntu, al final derivada de Debian, cada uno tendrá que realizar la instalación con el gestor de paquetes que tenga disponible obviamente.

docker volume create --name portainer_data
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Cuidado porque en las instrucciones de portainer viene docker volume create portainer_data faltando el –name.

Una vez ejecutado esto ya podemos entrar con el navegador en http://localhost:9000

Os preguntará que pongáis un usuario y una contraseña y pasaréis a la siguiente ventana donde nos preguntará si queremos levantarlo en local o en remoto, en mi caso he seleccionado en local y así poderlo ejecutar directamente en mi propio portátil.

La aplicación ya os podéis imaginar que si la abrimos con un navegador tiene un entorno web bastante cómodo y amigable, en las notas del programa os dejo un pantallazo para que podáis verlo.

Una vez tengáis instalado portainer lo primero es conocer un poco el interfaz.

El Dashboard es la página principal, la de entrada, donde os muestra un resumen muy visual de lo que hay, el número de contenedores, de imágenes, de redes, esta página es simplemente informativa y nos sirve para ver un poco por encima qué es lo que tenemos.

El siguiente menú es el de App Templates. Aquí podemos ver las plantillas que hay disponibles para descargar y posteriormente instalar, están ordenadas por categorías, y bueno podéis ver plantillas como por ejemplo nginx, gitlab, ghost, drupal, en fin, hay un montonazo y por supuesto podéis añadir vuestras propias plantillas, así que no está limitado a estas plantillas. Esto nos va a permitir por ejemplo instalar un gitlab con sólo click de ratón, así de fácil y por supuesto podremos hacer el backup del contenedor completo. Para instalar una aplicación simplemente vamos sobre ella y le damos instalar, esto nos creará el contenedor y todo, pero fíjaros bien porque en muchas cuando sea necesario nos pondrá en esa misma pantalla el usuario y contraseña por defecto.

El siguiente menú es el de Containers, aquí veremos todos nuestros contenedores, y podremos hacer varias cosas, como encenderlos, apagarlos, o ver detalles del propio contenedor, pinchando en la columna Name, de la imagen pinchando en la columna image o entrar en el pinchando enb published ports, os dejo en las notas un pantallazo.

Ahora pasamos a la pantalla de imagenes en la columna de la izquierda donde podemos hacer lo mismo de antes, pero con imágenes, además de bajar alguna imagen directamente si conocemos el nombre en DockerHub.

En networks podemos ver, añadir o eliminar redes de docker de una forma muy sencilla

En volumenes veremos los directorios del sistema que usa docker, podremos añadir volúmenes, o borrarlos, aunque lo normal es que simpelmente se gestionen al instalar nuevas imágenes.

Y luego ya pasaríamos a los logs y configuraciones del propio portainer.

Con esto ya tenemos más o menos visto el interfaz, pero todavía no hemos hecho nada, así que si os parece vamos a levantar un contenedor juntos para ver qué podemos hacer y cómo se hace esto de forma rápida y sencilla.

Voy a instalar un Ghost, para ello iré a App Templates y seleccionaré Ghost, en Name le pondré el nombre que quiera para el contenedor, el resto lo dejaré igual y pincharé en «Show advanced options» donde se me desplegará un menú y para evitar que Portainer me asigne un puerto al azar donde pone host pondré 0.0.0.0:80, de forma que el puerto 80 de mi máquina por defecto responderá a ese contenedor, ojo, tenemos que tener libre el puerto 80, si no habría que escoger otro o dejarlo vacío para que lo selecciones automáticamente Portainer.

Fíjaros que arriba os pone que para entrar tendréis que ir a /ghost, es importante siempre ver las instrucciones que nos da para cada imagen.

Bueno le damos, esperamos un poco y ya está. En mi caso fijaros que ha tardado muy poquito, esto es porque ya tenía descargada la imagen y claro, el despliegue ha sido casi instantáneo.

Para entrar simplemente ponemos en nuestro navegador localhost y voilà, ya lo tenemos y si vamos a /ghost podremos configurarlo.

Aclarar que cuando hemos puesto 0.0.0.0 le indicamos cualquier IP del servidor o de la máquina, si pusieramos 127.0.0.1 sólo responderá a esa IP.

Ahora vamos a borrarlo, para ello vamos a Containers, seleccionamos el Ghost y le damos a Stop, luego lo volvemos a seleccionar con los botones laterales y Remove, cuando nos pregunte «Automatically remove non-persistent volumes» le decimos que sí y aceptamos. Con esto ya lo habremos borrado, pero ojo, no se habrá borrado la imagen que seguirá en la sección de imagenes de nuestro portainer, aquí está, ¿lo veis?, en este caso ocupa 596.4 MB, obviamente para borrarlo es igual que borrar un contenedor.

Ahora vamos a hacer algo muy chulo, que va a ser instalar un drupal que acceda a otro contenedor que será la base de datos, así que tendremos que crear dos contenedores, uno para el mariadb y otro para el drupal, voy a comentaros como hacerlo porque es muy fácil, ya veréis.

Lo primero es crear un contenedor con mariadb. Vamos a App Templates, buscamos mariadb y le ponemos un nombre y una contraseña.

Ahora vamos a instalar drupal, para ello igual que antes, vamos a App Templates, buscamos drupal, le ponemos un nombre y en avanzadas le decimos que puerto 80 y lo creamos.

En este momento ya tenemos dos contenedores diferentes y vamos a instalar drupal con la base de datos en otro lado.

Ahora vamos con nuestro navegador a Localhost y tenemos la instalación de drupal, le decimos que Español, instalación estándar, y ahora seleccionamos la base de datos, mariadb en nuestro caso, le ponemos un nombre, el usuario será root si no hemos hecho nada en el contenedor de mariadb, le ponemos la contraseña y al abrir en opciones avanzadas tenemos que decirle el host de las bases de datos, en este caso vamos a portainer y copiamos la IP, en mi caso es la 172.18.0.4 y ponemos un prefijo a las tablas.

A partir de aquí hacemos una instalación normal de drupal que es básicamente decir que sí a todo y esperar un poco.

Ya casi hemos terminado, así que vamos a poner nombre de la web, usuario y demás.

Ya tenemos nuestro drupal, ahora para confirmar que todo ha ido como esperabamos vamos a portainer, y apagamos el contenedor de mariadb y cargamos la web de nuevo

Al esperar un poco veréis que drupal da error, es porque no tiene acceso a la base de datos, pero volvemos a levantar el contenedor de mariadb y ya está funcionando de nuevo.