- A Docker se le ha señalado de forma constante por problemas de vulnerabilidades de seguridad y consumo de recursos debido a su arquitectura con daemon en segundo plano (
dockerd)
- Podman adopta una arquitectura sin daemon, por lo que los contenedores se ejecutan directamente con los permisos del usuario, reduciendo la superficie de ataque y reforzando la estabilidad
- Con soporte para integración con Systemd, diseño amigable con Kubernetes y herramientas separadas basadas en la filosofía Unix como Buildah/Skopeo, mejora la eficiencia operativa
- Mantiene una alta compatibilidad con la CLI de Docker, así que con solo
alias docker=podman la mayoría de los flujos de trabajo existentes siguen funcionando igual
- Incluso en entornos reales de operación, simplifica la seguridad y la gestión de recursos, y en proyectos nuevos Podman se está convirtiendo en una opción más razonable y orientada al futuro
Limitaciones de Docker y problemas de seguridad
- Docker tiene una estructura en la que el daemon
dockerd siempre se ejecuta con privilegios de root
- Si se descubre una vulnerabilidad en el daemon, todo el host puede quedar expuesto al riesgo
- Casos destacados de incidentes de seguridad
- 2019: escape de contenedor en runC (CVE-2019-5736)
- 2022: vulnerabilidad Dirty Pipe de Linux, escape de cgroups v1
- 2024: “Leaky Vessels” en runC, vulnerabilidad en BuildKit
- 2024: campaña de cryptojacking mediante exposición de la API de Docker
- La repetición de estos incidentes deja en evidencia el riesgo estructural de fondo de una arquitectura basada en daemon
La arquitectura daemonless de Podman
- Podman no utiliza un daemon en segundo plano
- Al ejecutar
podman run, el contenedor funciona como proceso hijo directo de quien ejecuta el comando
- Como se ejecuta en modo rootless, incluso los privilegios de root dentro del contenedor no pasan de ser permisos de usuario común en el host
- Ventajas
- Mayor seguridad: si hay escape del contenedor, se reduce el alcance del daño
- Más estabilidad: aunque un contenedor falle, los demás no se ven afectados
- Eficiencia de recursos: al no mantener un daemon innecesario residente, baja el uso de memoria
Funciones diferenciadoras de Podman
- Integración con Systemd
podman generate systemd genera automáticamente archivos unit de systemd
- Es posible administrar servicios con los comandos estándar de
systemctl
- Afinidad con Kubernetes
- El concepto de Pod viene integrado de forma nativa, lo que facilita el desarrollo de apps multicontenedor
- Con
podman generate kube se puede generar directamente YAML de Kubernetes
- Filosofía Unix
- Podman se enfoca en la ejecución de contenedores, mientras que para construir imágenes se usa Buildah y para la gestión de registros Skopeo
- Esto permite usar herramientas optimizadas según cada propósito
Proceso de migración y compatibilidad
- La migración de Docker a Podman es casi sin interrupciones
- La CLI es compatible, así que se puede usar
podman en lugar de docker prácticamente tal cual
- Los Dockerfile existentes también funcionan sin cambios
- Diferencias
- En modo rootless no es posible enlazar puertos por debajo de 1024 → se recomienda usar un reverse proxy
- Es necesario gestionar los permisos de los volúmenes
- Las herramientas que dependen del socket de Docker pueden usar el modo de compatibilidad con la API de Docker de Podman
Aplicación en entornos reales y beneficios
- Después de usar Podman en producción
- Se reduce la carga de las revisiones de seguridad, con seguridad rootless aplicada por defecto
- Los patrones de uso de recursos se vuelven más simples y predecibles
- Docker sigue siendo popular, pero si se trata de proyectos nuevos o hay libertad para elegir tecnología, Podman resulta más adecuado
- Integración natural con el esquema de administración de Linux
- Arquitectura orientada a Kubernetes
- Proporciona un entorno de ejecución de contenedores más seguro y razonable
Resumen de la guía de migración para FastAPI
- Se puede usar el Dockerfile existente sin cambios
- Basta con sustituir por
podman build y podman run
- Registrar el servicio en systemd con
podman generate systemd
- Uso de Pods para soportar entornos multiservicio como bases de datos
- El flujo de trabajo de Docker Compose puede cubrirse con
podman-compose o mediante conversión con kompose
8 comentarios
Aquí dicen que es posible hacer una migración sin interrupciones, pero en un entorno de producción real hay bastantes cosas raras. Por ejemplo, en macOS, como la configuración predeterminada usa compresión
zstd, la imagen construida termina ocupando bastante espacio en el registro...Tanto Docker como Podman....
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
securityContext:
runAsNonRoot: true
runAsUser: UID
En realidad, la compatibilidad con Docker no es muy buena, así que la experiencia de uso no es tan buena...
Me fui a Podman pensando en usarlo sin root, pero al final regresé a Docker.
Como dijo otra persona, si lo vas a usar con Kubernetes, mejor simplemente usar
containerd.Me queda la duda de si, si
Docker composeno funciona bien y la ventaja es la compatibilidad con Kubernetes, entonces no sería mejor usar Kubernetes directamente. Yo también intenté usarlo, pero como no funcionó de una sola vez y tampoco podía mapear directamente puertos por debajo de 1024, al final lo uso en combinación conk3synerdctlpara construir imágenes.Aunque desde hace tiempo tengo ganas de cambiarlo, cuando lo intenté antes, a diferencia de lo que decían los desarrolladores, demasiados proyectos de Docker Compose no funcionaban correctamente...
Ni siquiera soporta redes de Docker.
Tengo entendido que, al igual que Docker, también soporta funciones de red.
¿Hay algo que todavía no funcione bien?
Opiniones de Hacker News
chrooty el concepto de jail. Mi código de despliegue ejecutaba el software fuera del entorno jail y monitoreaba conptracelos archivos que abría el proceso. Con esa salida saqué una lista de dependencias y la empaqueté. El resultado fue un despliegue pequeño, inmutable y con mejor seguridad. Cuando apareció Docker me recordó ese enfoque antiguo, y me pregunto si existe alguna herramienta similar que monitoree el uso de archivos de un contenedor Docker para reducir la distribucióngit push live mastery se desplegaba. He usado mucho Docker, pero ese fue el despliegue más fácil. Entiendo las ventajas de Docker, pero configurar HTTP en Ubuntu u OpenBSD no es tan difícil. Me pregunto si la reproducibilidad propia de Docker realmente vale tanto overhead de administraciónEnlace al código relacionado
--connection. Si hace falta, Podman incluso puede crear una VM automáticamente (usando lima). Podman Desktop también tiene una capa de compatibilidad con Docker que ayuda a reducir problemas de compatibilidad.deb. No existen.deboficiales, y los que encontré están desactualizados o dicen que ya no van a seguir actualizándose. Entonces queda la pregunta de por qué Podman no facilita más la instalación. Mi impresión es que RedHat no quiere gastar recursos de desarrollo en dar soporte a productos de la competencia. Es entendible, pero fuera del ecosistema RedHat da la sensación de ser ciudadano de segunda.deboficiales de upstream de forma constante impide que podamos usar Podman internamente. Da envidia ver que Docker sí mantiene bien su repo oficial de.debpodman generate systemdmencionado en el artículo ahora está deprecated. La alternativa son los Podman Quadlets, que funcionan de forma parecida a un docker-compose.yaml definido dentro de un archivo unit de systemduidmapde crun,userns) no funcionan bien. Tengo dudas sobre la utilidad real del mapeo con IDs secundariosignore_chown_errors, puedes mapear root al ID del usuario sin necesidad de mapeos adicionales y aplicarlo de forma simple/devnecesarios y exponer programas muy limitados en una red aisladaaquí,
aquí,
y aquí