Skip to content

linuxeroagrio/containers-systemd

Repository files navigation

Podman vs Docker con systemd: ¿Quién manda?

Este repositorio acompaña al video de Linuxero Agrio titulado:

"Podman vs Docker con systemd: ¿Quién manda?"

Aquí encontrarás ejemplos prácticos que muestran cómo integrar contenedores como servicios de systemd usando Docker (al estilo tradicional y manual) y Podman (con su enfoque moderno basado en Quadlets).


🧪 Estructura del repositorio

containers-systemd
│   README.md
│   webserver-docker.service # Archivo de systemd manual para contenedor docker
│   webserver-podman.container # Archivo quadlet para contenedor podman (rootless)
│   webserver-podman-user@.container # Archivo quadlet template para contenedor podman (rootles)
│
└───html
|   │   index.html # Archivo de indice de ejemplo

🐳 Parte 1: Docker + systemd

📦 Paso 1: Crear el contenedor

docker run --name webserver-docker -d -p 8080:8080 -v $(pwd)/html:/opt/nginx/html quay.io/linuxeroagrio/webserver:1.26.3-v3

Valida que tu contenedor este en ejecución:

docker ps

Valida se sirva el contenido de la página de ejemplo

curl http://localhost:8080

⚙️ Paso 2: Instalar la unidad systemd

Copia webserver-docker.service a /etc/systemd/system:

sudo cp webserver-docker.service /etc/systemd/system/

Recarga los daemon de systemd y habilita el servicio:

sudo systemctl daemon-reload
sudo systemctl enable --now webserver-docker.service
sudo systemctl is-active webserver-docker.service

🔎 Paso 3: Verificar logs

sudo journalctl -f -u webserver-docker.service

Este enfoque funciona, pero tiene varios inconvenientes:

  • Depende de que el daemon dockerd esté corriendo.
  • No es rootless.
  • Los contenedores no son servicios de systemd por sí mismos.

🟢 Parte 2: Podman + systemd (integración con Quadlets)

📦 Paso 1: Habilita linger para tu usuario (Opcional)

Si deseas que tu servicio de contenedor rootless se inicie con el sistema sin que tengas que hacer login, habilita linger para el usuario dueño del servicio de systemd a crear.

sudo loginctl show-user TU_USUARIO | grep -i linger
sudo loginctl enable-linger TU_USUARIO
# Para verificar linger habilitado
sudo loginctl show-user TU_USUARIO | grep -i linger

NOTA No olvides sustituir la cadena TU_USUARIO por el nombre de usuario de tu sistema, una forma de obtenerlo es ejecutando el comando whoami en la ternminal.

📄 Paso 2: Crear archivo Quadlet

Copia webserver-podman.container a tu directorio de usuario:

NOTA Antes de copiar, no olvides editar el archivo webserver-podman.container actualizando la opción Volume al path del dierectorio html de este repositorio en tu máquina. Una forma rápida de hacerlo es, desde una terminal, muevete al directorio donde descargaste este repositorio y ejecuta: sed -i s#/path/al/directorio#$(pwd)#g webserver-podman.container

mkdir -pv ~/.config/containers/systemd/
cp webserver-podman.container ~/.config/containers/systemd

⚙️ Paso 3: Verificar y activar el servicio Quadlet

Para verificar que no tengamos errores:

/usr/lib/systemd/system-generators/podman-system-generator --user --dryrun
systemd-analyze --user --generators=true verify webserver-podman.service

Y activamos el servicio Para verificar que no tengamos errores:

systemctl --user daemon-reload
systemctl --user start webserver-podman.service
systemctl --user is-active webserver-podman.service

Valida que tu contenedor este en ejecución:

podman ps

Valida que se sirva el contenido de la página de ejemplo

curl http://localhost:8081

🔎 Paso 4: Verificar logs

journalctl --user -f -u webserver-podman

Este método no necesita root, no requiere ningún daemon corriendo en segundo plano y permite que cada contenedor sea tratado como un servicio nativo de systemd.

🔍 Comparativa rápida

Característica Docker Podman + Quadlets
Usa daemon (dockerd) ✅ Sí ❌ No
Ejecuta como rootless ⚠️ Parcial ✅ Completo
Integración con systemd ❌ Manual ✅ Automática
Usa archivos .container ❌ No ✅ Sí
Manejo con systemctl ⚠️ Indirecto ✅ Natural

🎯 Conclusión

Podman no solo compite con Docker, lo supera en diseño moderno y compatibilidad con systemd. Usar Quadlets es más limpio, más seguro y más potente, especialmente cuando se trabaja en entornos multiusuario o sin privilegios de administrador.

"Con Podman, tu contenedor ya no es una caja negra… es un ciudadano systemd de primera clase."

📺 ¿Aún no has visto el video?

👉 Encuéntralo en el canal de YouTube Linuxero Agrio y prepárate para una comparación ácida entre dos mundos que se cruzan: contenedores y sistemas init.

🧂 Bonus para los ñoños

Crea un servicio de systemd para dos contenedores rootless usando solamente el archivo de template webserver-podman-user@.container y responde:

  • ¿Que hace este template diferente al original?

NOTA No olvides editar el archivo webserver-podman-user@.container actualizando la opción Volume al path del dierectorio html de este repositorio en tu máquina. Una forma rápida de hacerlo es, desde una terminal, muevete al directorio donde descargaste este repositorio y ejecuta: sed -i s#/path/al/directorio#$(pwd)#g webserver-podman-user@.container

TIP Aqui hay dos referencias que te pueden servir de guía: systemd: Template unit files de Fedora Magazine y Template files en la documentación de Quadltes.

Referencias

About

containers-systemd

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages