737 - Automatiza Docker sin desastres

737 - Automatiza Docker sin desastres

Automatiza Docker sin desastres. Tugtainer, la alternativa a Watchtower con Interfaz Web y control granular para actualizar tus contenedores Docker

1:25
-3:15

Hay dos asuntos que me tienen obsesionado en los servicios levantados con Docker. Por un lado son las copias de seguridad tanto de bases de datos como de archivos de configuración de los distintos contenedores, sobre todo de lo relativo a bases de datos. Y por otro lado son las imágenes de los contenedores, con el objetivo de tenerlas siempre al día, y en caso de que sean parcheadas tenerlas actualizadas para evitar las vulnerabilidades. Tengo claro que todo esto es preventivo, en el sentido de que se trata de acciones que hay que realizar antes de que llegue el desastre. Pero igualmente tengo claro que es fundamental hacerlo. En el caso de las copias de seguridad, ya he salvado alguna situación con esas copias de seguridad. Sin embargo, en el caso de las actualizaciones de imágenes por el momento, me han causado mas trastorno que ventajas. Así, en este nuevo episodio te traigo una herramienta alternativa a watchtower y ouroboros que permite realizar la actualización automática de las imágenes de los contenedores Docker, pero con interfaz gráfica.

Automatiza Docker sin desastres, Tugtainer, el Watchtower con interfaz gráfica

Actualizaciones automáticas de contenedores Docker pero con cuidado

Actualmente, las actualizaciones automáticas de imágenes Docker lo estoy realizando con watchtower para la mayoría de mis contenedores, pero no para todos. Durante estos últimos años, me he llevado mas de una sorpresa desagradable al actualizar de forma completamente desatendida los contenedores. Si bien, hay algunos contenedores que no me impactan en mi día a día, hay otros que si lo hacen. Por ejemplo, los servicios que utilizo para mi, no me importa que estén uno o dos días caídos.

Sin embargo, hay otros servicios, como por ejemplo, las páginas web que administro, que estén caídas, no es que me impacta a mi, es que impacta a mucha mas gente, tanto las personas con las que comparto esas páginas, como a los visitantes de las mismas.

Claro que llegados a este punto, te preguntarás si es mejor tener el servicio caído o que una imagen de un contenedor no esté actualizada y sea susceptible de ser atacada. Y la respuesta es que no hay una respuesta única. Depende del servicio, de la criticidad del mismo, de la frecuencia con la que se actualice la imagen, etc. Por eso, en mi caso, opté en su momento por utilizar watchtower para la mayoría de mis contenedores, pero no para todo. Hay algunos contenedores, como es el caso de Traefik, que lo hago de forma manual.

Ahora bien, en lugar de hacer las actualizaciones todos los días, cambié radicalmente mi política de actualizaciones a hacerlas una vez a la semana, preferiblemente el sábado, porque de esta forma tengo mayor capacidad de reacción en caso de que algo falle.

El caso especial de las páginas web

Como te decía anteriormente, un caso muy sensible son las páginas web. En este caso, el stack que tengo montado incluye entre otros

  • WordPress
  • Nginx
  • MariaDB
  • Redis

El problema con el que me he encontrado es que al actualizar alguna de las imágenes del stack y reiniciar no se reinicia de forma correcta y me quedo sin la página web durante un tiempo.

Para resolver este problema lo que hice fue utilizar las dependencias que se pueden establecer en Docker. Así, por ejemplo, en el caso del contenedor de WordPress, las dependencias están de la siguiente forma,

depends_on:
  mariadb:
    condition: service_healthy
    restart: true
  redis:
    condition: service_healthy

Desde la última actualización de la imagen de WordPress parece que todo ha ido correctamente, pero aún así, la verdad es que voy con con extremo cuidado.

Actualizaciones automáticas con Watchtower

Hasta la fecha, las actualizaciones automáticas las he venido haciendo con Watchtower. La gran ventaja de esta herramienta es que se integra con Docker a la perfección, y hace un uso muy inteligente de las etiquetas que se pueden establecer en los contenedores Docker.

Esto de las etiquetas es algo que utilizo mucho y viene, al menos en mi caso muy de la mano de Traefik. En el caso de Watchtower, puedes establecer que todos los contenedores se actualicen de forma automática, y definir mediante etiquetas aquellos que no quieres que se actualicen.

Sin embargo, para mi, Watchtower tiene un inconveniente, que a su vez es su gran ventaja que comentaba anteriormente. Al hacerse todo mediante etiquetas, queda como oculto y no sabes exactamente que es lo que está ocurriendo. Realmente, lo que hecho en falta de Watchtower es una interfaz gráfica que me permita ver el estado de las actualizaciones, y que me permita tener un mayor control sobre las mismas.

Otro inconveniente de esta herramienta es que lleva un par de años, en el momento de escribir este artículo, sin actualizaciones. Esto no quiere decir gran cosa, sin embargo, en una tecnología que avanza tan rápido como Docker, el hecho de que una herramienta no se actualice puede ser un indicativo de que en algún momento pueda dejar de funcionar correctamente.

Tugtainer, actualizaciones automáticas de contenedores Docker con interfaz gráfica

Tal y como lo describe el desarrollador de Tugtainer en GitHub, **Tugtainer es como el *archi conocido* Watchtower pero con una interfaz web donde configurar y visualizar el estado actual de tus contenedores.

Antes que nada, quiero hacer dos observaciones fundamentales para evitar que te lances a utilizar Tugtainer y luego te acuerdes de mi y de toda mi familia. La primera es que se trata de una herramienta que apenas tiene un mes de vida, con lo que esto supone. Y por otro lado, el propio desarrollador indica lo siguiente,

Por favor, ten en cuenta que la aplicación se distribuye tal cual y no se recomienda su uso en un entorno de producción.

Así que queda bajo tu propia responsabilidad que utilices esta herramienta para las actualizaciones automáticas.

Por otro lado, indicar que las actualizaciones automáticas están deshabilitadas por defecto. De forma que eres tu el encargado de habilitarlas cuando quieras.

Características de Tugtainer

Algunas de las características mas destacables de Tugtainer son las siguientes,

¡Por supuesto! Aquí tienes las características de Tugtainer en el formato de lista que solicitaste, manteniendo el contexto técnico:

  • Interfaz de usuario web (Web UI). Es la herramienta de gestión principal a la que se accede a través de un navegador web. Permite controlar y configurar la aplicación de forma visual, simplificando la administración de los contenedores Docker.
  • Autenticación (Authentication). Ofrece un mecanismo para proteger el acceso a la Interfaz Web mediante credenciales (usuario y contraseña), asegurando que solo el personal autorizado pueda modificar la configuración o acceder al estado de los contenedores.
  • Programación tipo Crontab (Crontab scheduling). Permite definir de manera precisa y recurrente la frecuencia para la comprobación de nuevas versiones de las imágenes de Docker, utilizando el formato estándar de sintaxis de Crontab de Linux.
  • Notificaciones a una amplia gama de servicios (Notifications to a wide range of services). Capacidad de enviar alertas sobre el estado de las actualizaciones (disponibilidad o finalización) a diversas plataformas de comunicación como correo electrónico, Telegram, Discord, etc.
  • Configuración por contenedor (solo verificar o actualizar automáticamente) (Per-container config (check only or auto-update)). Otorga un control granular, permitiendo establecer, para cada contenedor Docker individualmente, si la aplicación debe solo notificar la existencia de una actualización o si debe proceder a la actualización automática.
  • Verificación y actualización manual (Manual check and update). Ofrece la opción de iniciar un chequeo de versiones o forzar una actualización de inmediato, fuera del ciclo de programación, mediante un clic en la interfaz web.
  • Limpieza de imágenes automática/manual (Automatic/manual image pruning). Es la función de limpiar y eliminar las imágenes de Docker antiguas y sin usar que se acumulan tras las actualizaciones, permitiendo liberar espacio en disco de forma programada o manual.

Instalación de Tugtainer

La instalación de Tugtainer es realmente sencilla. Básicamente solo tienes que utilizar un compose.yml, similar al siguiente y lo tendrás funcionando en un periquete,

services:
  tugtainer:
    image: quenary/tugtainer:latest
    container_name: tugtainer
    restart: unless-stopped
    init: true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - tugtainer_data:/tugtainer
    networks:
      - proxy
    labels:
      traefik.enable: true
      traefik.http.services.tugtainer.loadbalancer.server.port: 80
      traefik.http.routers.tugtainer.entrypoints: https
      traefik.http.routers.tugtainer.rule: Host(`tugtainer.tuservidor.es`)
      traefik.http.routers.tugtainer.middlewares: oidc-auth@file,my-geoblock@file
networks:
  proxy:
    external: true
volumes:
  tugtainer_data: {}
x-dockge:
  urls:
    - https://tugtainer.tuservidor.es`

En mi caso particular, como ya te puedes imaginar, lo tengo detrás de Traefik, y le he puesto un par de middlewares para la autenticación y el bloqueo geográfico. Realmente la autenticación no me haría falta, porque lleva su propio sistema, pero cuando lo levanté no lo tenía claro, y así se quedó.

Además lo tengo levantado utilizando Dockge, que es una herramienta de gestión de contenedores similar a Portainer salvando mucho las distancias. Si no conoces Dockge te recomiendo que le des un vistazo, porque es una herramienta realmente liviana y muy interesante. Te hablé de esta herramienta en el episodio 686 titulado Actualiza tus conenedores Docker SIN dolor. Dockge, Cup y Homepage

Conclusiones

Te he querido traer esta herramienta porque me ha parecido realmente interesante. Finalmente, yo te doy a conocer distintas herramientas, y eres tu el que decide si le das una oportunidad o no. En este caso, creo que es una herramienta que merece la pena probar, sobre todo si tienes muchos contenedores Docker y quieres tenerlos actualizados de forma automática, pero con un mayor control sobre las actualizaciones.

En mi caso particular, te tengo que ser completamente sincero, y es que no tengo muy claro que me vaya a quedar con ella. Por el momento seguro se queda, mas adelante ya veremos lo que hago.

Actualmente, me encuentro realmente cómodo utilizando Dockge y Cup, tal y como te conté en ese episodio 686. Si bien, Cup no tiene autenticación, se la estoy facilitando con la combinación de Traefik y PocketID, con lo que me siento realmente cómodo, al menos de momento.


Más información,

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *