Lo mejor de dos mundos. Despliega Docker Compose en Podman con Dockge Vistas: 19

En las últimas semanas he estado tonteando con otros servicios que te permiten gestionar contenedores, pero finalmente siempre termino regresando a Dockge por lo simple que resulta y lo fácil que es de gestionar. Soy consciente que Dockge adolece de algunas características que yo veo muy prácticas, pero es que la sencillez que me aporta supera con creces esas faltas. La cuestión es que como broche de oro a esta serie de Podman, y a falta de una herramienta que estoy preparando y que veremos si ve la luz, quedaba un asunto y es como hacer lo mismo que haces con Docker y Dockge pero con Podman. Y la cuestión es que es tan sencillo y fácil que realmente vale la pena hacer la migración, sabiendo que el resultado es mas seguro.

0:00 / 0:00

Lo mejor de dos mundos. Despliega Docker Compose en Podman con Dockge

¿Que es Dockge?

Antes de contarte lo sencillo que es montar Dockge con Podman, probablemente lo primero que tendría que hacer es hablarte un poco sobre Dockge. Y la definición mas clara que tengo para este servicio es Dockge es como Portainer pero fácil. Se trata de un servicio que te permite levantar tus stacks mediante compose.yml.

Igual que te digo que es como Portainer pero fácil, también es justo que te diga que no tiene todas las características y opciones que te ofrece Portainer. De ahí su simplicidad. Pero la realidad, es que para la mayoría de operaciones y acciones que realizamos es mas que suficiente.

Algunas de las características de Dockge son las siguientes,

  • Gestiona tus compose.yml. Te permite crear, editar, iniciar y parar todos tus stacks y además te permite actualizar las imágenes.
  • Tiene un editor interactivo de compose.yml
  • También tiene una terminal web interactiva, que es realmente cómoda cuando no te encuentras delante de tu terminal de cabecera y necesitas realizar alguna operación.
  • Soporta múltiples agentes, de forma que desde un único gestor puedes gobernar todas tus instalaciones.
  • Te permite convertir los comandos docker run en compose.yml de forma sencilla, lo que es realmente útil para aquellos que no se sienten cómodos escribiendo compose.yml a mano.
  • Los compose.yml se guardan y almacenan en tu sistema de archivos de forma normal. Tanto es así que tu puedes interactuar con ellos directamente utilizando comandos docker compose.
  • La interfaz es adaptativa, responsive

Dockge con Podman

Aquí es donde llega la gran ventaja, la combinación de Dockge con Podman. Y es que si has levantado Dockge con Docker te habrás dado cuenta de que funcionas como usuario root, y claro eso no es muy agradable, teniendo en cuenta que estás trabajando con el resto de contenedores.

El quadlet es tremendamente sencillo, y es que lo único que tienes que hacer es crear un nuevo quadlet con el siguiente contenido,

[Unit]
Description=Dockge

[Container]
Image=docker.io/louislam/dockge
ContainerName=dockge
AutoUpdate=registry
PodmanArgs=--init

# Volumes
Volume=%t/podman/podman.sock:/var/run/docker.sock:ro
Volume=%h/.config/dockge/stacks:/opt/stacks:Z
Volume=%h/.config/dockge/data:/app/data:Z
# Network
Network=proxy.network
# Labels
Label=traefik.enable=true
Label=traefik.http.services.dockge.loadbalancer.server.port=5001
Label=traefik.http.routers.dockge.rule=Host(`dockge.tuservidor.es`)
Label=traefik.http.routers.dockge.entrypoints=websecure
Label=traefik.http.routers.dockge.tls.certresolver=myresolver
Label=traefik.http.routers.dockge.middlewares=seguridadHeaders@file,compresionHeaders@file

# HealthCheck
HealthCmd=/app/extra/healthcheck
HealthInterval=60s
HealthTimeout=30s
HealthStartPeriod=60s
HealthRetries=5

[Service]
# Restart
Restart=on-failure
RestartSec=10s
StartLimitIntervalSec=300
StartLimitBurst=3
# Tiempo máximo para que el healthcheck pase a healthy
TimeoutStartSec=90
{% raw %}
ExecStartPost=/usr/bin/bash -c 'while [ "$(podman inspect --format "{{.State.Health.Status}}" dockge)" != "healthy" ]; do sleep 2; done'
{% endraw %}

[Install]
WantedBy=multi-user.target

La magia de los quadlets

Llegados a este punto quiero resaltar la magia de los quadlets, y es que con este simple archivo, que no es mas que un servicio de systemd, lo que conseguimos es levantar el servicio de Dockge con Podman, y lo mejor de todo es que lo hacemos sin necesidad de ser root, lo que hace que el servicio sea mucho mas seguro. Pero quiero que te fijes en algunos detalles importantes,

  • AutoUpdate=registry. Esto implica que cuando haya una nueva versión de la imagen en el registro, el servicio se reiniciará automáticamente para actualizarse. Esto es realmente útil para mantener tu servicio siempre actualizado sin necesidad de intervención manual.
  • PodmanArgs=--init. En este caso, el argumento --init se utiliza para asegurarse de que el proceso principal del contenedor se ejecute como PID 1, lo que es importante para la gestión adecuada de señales y procesos secundarios dentro del contenedor.
  • Volume=%h/.config/dockge/stacks:/opt/stacks:Z. Con esta línea estamos montando un volumen desde el host al contenedor, lo que nos permite almacenar nuestros compose.yml de forma persistente en el host. Esto es crucial para asegurarnos de que nuestros stacks se mantengan incluso si el contenedor se reinicia o se actualiza. Pero la gracia es que lo tienes en tu sistema de archivos donde esperarías encontrarlo en ~/.config/dockge/stacks. Ahí, puedes hacer cualquier modificación, y en su caso, si lo necesitas, puedes operar con ellos directamente.
  • HealthCmd=/app/extra/healthcheck. Con esta línea estamos definiendo un comando de salud para el contenedor. Esto es crucial para asegurarnos de que el servicio se reinicie automáticamente si el contenedor no está funcionando correctamente. En este caso, el comando de salud se encuentra dentro del contenedor y se ejecutará periódicamente para verificar su estado.
  • Restart=on-failure. Esto asegura que el servicio se reinicie automáticamente si el contenedor falla por alguna razón, lo que mejora la resiliencia de tu aplicación.

La magia de Dockge

Pero ¿que pasa ahora con mis compose.yml?. Lo habíamos dejado en ~/.config/dockge/stacks, y lo que ocurre es que Dockge los lee directamente desde ahí, lo que significa que cualquier cambio que hagas en ese directorio se reflejará automáticamente en Dockge. Esto es realmente útil porque te permite gestionar tus stacks de forma sencilla y directa, sin necesidad de complicaciones adicionales.

Llegados a este punto te habrás dado cuenta que podrías funcionar exactamente igual que con Docker y los compose.yml pero en realidad, bajo el capó, lo que estás haciendo es utilizar Podman para ejecutar tus contenedores, lo que te aporta una capa adicional de seguridad y aislamiento. Esto es especialmente importante si estás ejecutando servicios que podrían ser vulnerables o si simplemente quieres asegurarte de que tu entorno de contenedores sea lo más seguro posible.

Y claro, ahora es justo donde aparece la duda, ¿cuando utilizar los compose.yml y cuando utilizar los quadlets? Pues la verdad es que mientras busco una solución única y exclusiva con Quadlets, lo que he adoptado es para el caso concreto de atareao.es, todos los servicios importantes, como WordPress, la base de datos, el proxy inverso, van a ir directamente con Quadlets, y para aquellos servicios accesorios o que simplemente quiero probar en un momento puntual, lo haré con Dockge.

El uso de Podman, y en particular de los Quadlets, aporta muchas ventajas, como la seguridad y el aislamiento, pero todavía tengo que encontar la solución de gestionar de forma sencilla los Quadlets, integrandolos con Git, un repositorios, un backend y un frontend que me permitan gestionar mis Quadlets de forma sencilla, y es que aunque los Quadlets son realmente sencillos de escribir, lo cierto es que no es tan sencillo gestionarlos, y ahí es donde estoy trabajando para encontrar la solución ideal.


Más información,

Deja una respuesta

Publicar comentario