Docker-Controller-Bot, tus contenedores en la palma de la mano

Bot de Telegram para el control absoluto de todos tus contenedores Docker.

Docker-Controller-Bot, tus contenedores en la palma de la mano
Regístrate en HDS+
Es gratuito. Ten acceso a todo el contenido.
🔓
Dificultad del tutorial: Fácil

Tras un tiempo pensando en desarrollar algo así, al fin me he animado a ello. ¿Qué te parece si te digo que puedes controlar todos tus contenedores docker desde Telegram? Ese es el tema que nos atañe hoy. Además de de ser realmente sencillo de instalar.

Requisitos previos

Solo serán 2 requisitos muy básicos:

  • Tener docker (con docker-compose) instalado en el servidor
  • Tener un bot de telegram (token y chatId)
✏️
Si no tienes un bot de telegram, crearlo es gratuito y se tardan 10 segundos. Habla con @BotFather y con @cid_bot

En mi caso los datos serían:

TOKEN="6319625328:AAHxLIgeshx0C68spwr6heNsAsZHeG2qKRo"
ID="4405089"

(No puedes usar estos datos, has de crear tu bot y obtener los tuyos propios)

Instalación del bot

La instalación de este contenedor no requiere crear carpeta alguna, es tan sencillo como ejecutar el siguiente docker-compose:

version: '3.3'
services:
    docker-controller-bot:
        environment:
            - TELEGRAM_TOKEN=6319625328:AAHxLIgeshx0C68spwr6heNsAsZHeG2qKRo
            - TELEGRAM_ADMIN=4405089
            - CONTAINER_NAME=Docker-Controller-Bot
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
        image: dgongut/docker-controller-bot:latest
        container_name: Docker-Controller-Bot
        restart: always
        network_mode: host
        tty: true
⚠️
IMPORTANTE: Cambiar las variables:
TELEGRAM_TOKEN y TELEGRAM_ADMIN por los datos de vuestro bot.
CONTAINER_NAME por el nombre que le hayáis puesto al bot en la propiedad container_name

En Synology

En este caso sí podemos crear una carpeta para almacenar el fichero docker-compose.yaml, en mi caso he creado la siguiente: /docker/docker-controller-bot

  • Crearemos un nuevo proyecto en Container Manager.
  • Seleccionamos la carpeta de docker-controller-bot y nos autodetectará el fichero, ya solo sería pulsar en siguiente sin modificar nada hasta completar su instalación

En UnRAID también es muy sencillo, puesto que está la plantilla oficial y nos pedirá los mismos datos que hemos descrito anteriormente:

Uso del bot

Nos dirigimos al bot en Telegram y pulsamos en el botón Iniciar que nos aparecerá debajo. Si todo ha ido bien, nos responderá al comando /start con el menú principal.

A este menú podemos acceder siempre que queramos escribiendo /start o bien accediendo al menú de abajo a la izquierda.

Estos comandos tienen la posibilidad de ser usados de 2 formas diferentes:

  • Pulsando sobre el menú o escribiendo el comando, hará que nos aparezca un desplegable con botones para pulsar en el contenedor que queramos
  • Otra forma de usarlo es si conocemos el nombre exacto de nuestro contenedor podemos escribirlo a continuación del comando

Algunos ejemplos de otros comandos serían, por orden: /info, /compose, /logfile y /list

Funciones extra

Estado de los contenedores

La primera función en segundo plano es la de chequear el estado de los contenedores. Si un contenedor se cierra o se inicia, aunque no se haya realizado a través del bot, éste nos notificará de tal suceso.

Actualizaciones

El bot se encuentra chequeando actualizaciones de los contenedores en segundo plano.

Este proceso se realiza cada 4h pero se puede modificar esta frecuencia añadiendo al docker-compose la variable: CHECK_UPDATE_EVERY_HOURS.

Por ejemplo, si quisiéramos que este chequeo fuera cada 3 días (72h) bastaría con dejar el docker-compose de la siguiente manera:

version: '3.3'
services:
    docker-controller-bot:
        environment:
            - TELEGRAM_TOKEN=6319625328:AAHxLIgeshx0C68spwr6heNsAsZHeG2qKRo
            - TELEGRAM_ADMIN=4405089
            - CONTAINER_NAME=Docker-Controller-Bot
            - CHECK_UPDATE_EVERY_HOURS=72
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
        image: dgongut/docker-controller-bot:latest
        container_name: Docker-Controller-Bot
        restart: always
        network_mode: host
        tty: true
⚠️
IMPORTANTE: Cambiar las variables:
TELEGRAM_TOKEN y TELEGRAM_ADMIN por los datos de vuestro bot.
CONTAINER_NAME por el nombre que le hayáis puesto al bot en la propiedad container_name

Además tanto desde el comando /info como en el mismo mensaje de actualización disponible nos da la opción de actualizar dicho contenedor, algo extremadamente útil y que podremos realizar en cualquier momento en un clic.

Ejemplo de un mensaje de actualización:

Además de hacerlo a través de la notificación de actualización, se puede hacer mediante el comando /info

Si queréis desactivar esta función basta con añadir la variable CHECK_UPDATES=0 de la siguiente manera:

version: '3.3'
services:
    docker-controller-bot:
        environment:
            - TELEGRAM_TOKEN=6319625328:AAHxLIgeshx0C68spwr6heNsAsZHeG2qKRo
            - TELEGRAM_ADMIN=4405089
            - CONTAINER_NAME=Docker-Controller-Bot
            - CHECK_UPDATES=0
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
        image: dgongut/docker-controller-bot:latest
        container_name: Docker-Controller-Bot
        restart: always
        network_mode: host
        tty: true

Uso en grupos

Si eres de los que te gusta el orden como a mí, seguramente tengas varios bots dentro de un grupo en el cual recibes notificaciones de todos ellos. Docker-Controller-Bot está preparado para ese uso, solamente hay que añadir la variable TELEGRAM_GROUP con el chatId del grupo. Al añadir el bot al grupo, hay que darle permisos de administrador para que pueda borrar mensajes.

version: '3.3'
services:
    docker-controller-bot:
        environment:
            - TELEGRAM_TOKEN=6319625328:AAHxLIgeshx0C68spwr6heNsAsZHeG2qKRo
            - TELEGRAM_ADMIN=4405089
            - CONTAINER_NAME=Docker-Controller-Bot
            - TELEGRAM_GROUP=-102138927398
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
        image: dgongut/docker-controller-bot:latest
        container_name: Docker-Controller-Bot
        restart: always
        network_mode: host
        tty: true
⚠️
IMPORTANTE: Cambiar las variables:
TELEGRAM_TOKEN y TELEGRAM_ADMIN por los datos de vuestro bot.
CONTAINER_NAME por el nombre que le hayáis puesto al bot en la propiedad container_name
👉
Si no sabes cómo obtener este Chat ID del grupo, lee la siguiente función

Logs avanzados

El bot irá escribiendo en los logs todas las interacciones y todo lo que va haciendo en cada momento. Esto será de gran ayuda en caso de que algo no vaya como esperábamos.

Por ejemplo, una cosa muy útil que he integrado es que siempre que alguien interactúe con el bot, este escriba tanto el chatId del usuario como del chat donde se ha escrito en los logs. Si no conocemos qué valor tenemos que poner en la variable TELEGRAM_GROUP, basta con escribirle al bot dentro del grupo y mirar los logs.


Comentarios del desarrollador

En esta ocasión, no es una recomendación externa, sino un programa desarrollado por mí mismo. Podéis verlo en /version, en mi DockerHub o en mi GitHub puesto que es de código abierto.

He tratado de seguir las siguientes líneas de diseño:

  • Utilidad máxima
  • Facilidad de uso
  • Atención al detalle
  • Minimo consumo (apenas 30MB de RAM)
  • Velocidad

No por ello está exento de posibles fallos. He contado con la inmensa ayuda de Joan y Antonio que han sido mis betatester estas semanas, en las cuales hemos descubierto muchísimos pequeños errores y mejoras las cuales se han ido puliendo hasta ofrecer el programa que tenemos a día de hoy.

Como aún se encuentra en una fase muy temprana, v1.0.0 (docker-compose actualizados a la version v.1.1.0) a fecha de este post, me gustaría en la medida de lo posible que me comentarais personalmente si encontráis algún fallo o si tenéis alguna sugerencia. No muerdo, podéis encontrarme en Telegram como @dgongut.

Invítame a un café



Más artículos

Snapp, el nuevo acortador de enlaces por excelencia

Snapp, el nuevo acortador de enlaces por excelencia

Descubre esta magnifica alternativa a Shlink. Mucho más sencillo y con una interfaz más moderna.

Por Joan
Dozzle: visualizador de logs en tiempo real para tus Dockers

Dozzle: visualizador de logs en tiempo real para tus Dockers

Monitoriza todos tus Docker a golpe de clic. Visualiza todos los registros en una misma plataforma.

Por Joan