Tu homelab probablemente corre Docker. Y Docker funciona bien — hasta que un container comprometido escala a root via el daemon de Docker, o un CVE como el reciente CVE-2026-31431 en Docker Engine te hace reconsiderar tu postura de seguridad. Docker corre como root, y si alguien rompe el container, el daemon es el único muro entre ese container y tu host.
Podman resuelve esto de raíz: sin daemon, sin root, con la misma CLI de Docker y compatibilidad con docker-compose.yml. En 2026, con la atención puesta en seguridad de containers, Podman ya no es una alternativa experimental — es producción-ready para homelabs.
Esta guía cubre instalación, podman-compose, Quadlets systemd, rootless networking, y cómo migrar tu homelab desde Docker sin romper nada.
Podman vs Docker — Architecture and Security
La diferencia fundamental no es lo que puedes correr, sino cómo lo corres.
| Aspecto | Docker | Podman |
|---|---|---|
| Arquitectura | Cliente → dockerd (daemon root) → containerd → runc | Cliente → conmon → runc (sin daemon) |
| Modelo | Client-server | Fork/exec directo |
| Root | Daemon corre como root, containers heredan | Rootless nativo, cada usuario corre sus containers |
| Pods | No nativo | Sí (comparten network, IPC, UTS) |
| Systemd | Manual con restart scripts | Quadlets nativos |
Docker usa un modelo client-server: cada docker run pasa por el daemon dockerd que corre como root. Si explotan el daemon —ya sea via un container malicioso o una API expuesta— tienen root en tu host.
Podman usa fork/exec: el proceso podman run crea el container directamente usando conmon y runc. No hay daemon. En modo rootless, todo corre dentro de un user namespace, así que aunque escapen del container, solo tienen los permisos del usuario no-root.
Para un homelab donde compartes acceso o expones servicios web, esta diferencia es enorme.
Installing Podman on Debian/Ubuntu
En Debian 12, Ubuntu 24.04, o derivados, la instalación es directa:
|
|
Podman viene preconfigurado para usar Docker Hub como registry por defecto. Si necesitas registries privados, edita /etc/containers/registries.conf:
|
|
Para rootless, verifica que tu usuario tenga entradas en /etc/subuid y /etc/subgid:
|
|
Estas entradas se crean automáticamente al instalar Podman. Si no existen, créalas con sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $(whoami).
Running Rootless Containers — First Steps
La CLI de Podman es idéntica a Docker en el 99% de los casos. Literalmente puedes hacer alias docker=podman y seguir trabajando.
|
|
La diferencia más notable en rootless: los puertos privilegiados (<1024) no funcionan sin configuración extra. Para exponer en puerto 80 o 443, necesitas:
|
|
Docker Compose to podman-compose — Migrating Your Stacks
Aquí es donde muchos homelabbers se preocupan. La buena noticia: podman-compose acepta el mismo docker-compose.yml que ya tienes.
|
|
Tu docker-compose.yml existente funciona sin cambios para la mayoría de casos:
|
|
Diferencias que encontré al migrar stacks reales:
- Network mode
hostno funciona en rootless Podman (usar--network slirp4netns:port_handler=slirp4netns) depends_onpuede no respetar el orden de inicio — usar healthchecks explícitosulimitsnecesita ajustes en rootless (algunos valores requieren--privileged)
Podman Quadlets — systemd-Native Container Management
Los Quadlets son, para mí, la razón más convincente para migrar a Podman. En lugar de scripts de restart o restart: always en compose, defines containers como archivos .container que systemd maneja nativamente.
|
|
Para activarlo:
|
|
Los Quadlets soportan también Pods (nginx.pod) y volumes (nginx.volume), permitiendo definir stacks completos como archivos systemd:
|
|
Systemd maneja auto-start en boot, restart on failure, y logging integrado con journald. Sin scripts externos, sin agentes, sin nada más que systemd.
Rootless Networking — How It Works
Podman rootless usa slirp4netns por defecto: un pequeño proceso userspace que hace NAT entre el namespace de red del container y la red del host. No requiere privilegios, pero tiene overhead de CPU y no soporta tráfico ICMP.
Desde Podman 5.x, pasta es una alternativa más rápida:
|
|
Para redes más avanzadas (macvlan, ipvlan):
|
|
En rootless, las redes macvlan no funcionan sin privilegios extra. La alternativa práctica es exponer puertos via --publish y usar un reverse proxy en un container rootful (o en el host) para enrutar tráfico.
Practical Migration Guide — Docker to Podman
Si ya tienes un homelab con Docker, la migración puede ser gradual. Nadie te obliga a migrar todo de un día para otro.
|
|
Para compatibilidad con herramientas que esperan el socket de Docker (como Portainer, Watchtower), Podman expone un socket compatible:
|
|
Luego configura tus herramientas para apuntar a unix:///run/user/1000/docker.sock via DOCKER_HOST.
Para builds de Dockerfiles, funciona igual:
|
|
BuildKit no está disponible en Podman, pero podman build usa Buildah internamente y maneja cache layer como Docker.
Limitations and Tradeoffs
Ninguna herramienta es perfecta. Estas son las limitaciones reales que encontré:
| Limitación | Impacto | Workaround |
|---|---|---|
| No Docker Swarm | Orquestación multi-host | Usar K3s, Nomad, o Docker Compose |
| No BuildKit | Builds multi-etapa más lentos | Aceptable para homelab |
| Macvlan rootless complicado | IPs dedicadas a containers | Usar port publishing + reverse proxy |
host network no disponible |
Containers que necesitan red del host | Usar --network slirp4netns con ports |
| Podman desktop menos maduro | No hay Docker Desktop equivalente | CLI + Quadlets es suficiente |
Ciertas imágenes con --privileged |
Algunos tools requieren capabilities root | Evaluar si realmente necesitas privilegios |
Para un homelab —donde no corres Swarm, no necesitas clusters Kubernetes, y valoras seguridad sobre features— estas limitaciones son aceptables.
Conclusion
Podman ha madurado lo suficiente como para reemplazar a Docker en un homelab. La arquitectura sin daemon y rootless reduce significativamente la superficie de ataque, los Quadlets integran containers con systemd de forma elegante, y la compatibilidad con docker-compose.yml hace que la migración sea incremental y de bajo riesgo.
Mi recomendación: empieza con un container no crítico. Ponle un alias alias docker=podman en tu shell. Corre un stack con podman-compose. Cuando te sientas cómodo, migra el resto. No hay prisa — pero el rootless es el futuro de los containers, y Podman ya está aquí.
|
|