🦭 PODMAN
Guía y Tutorial Básico de Podman
Gestión de contenedores modernos sin demonio y en modo Rootless
Módulo 1 de 10 | Para Administradores de Sistemas y Desarrolladores | Edición 2026
1. Introducción a Podman
Podman (Pod Manager) es un motor de contenedores de código abierto, desarrollado por Red Hat, diseñado para buscar,
ejecutar, construir, compartir y desplegar aplicaciones utilizando imágenes de contenedores compatibles con el estándar OCI
(Open Container Initiative).
¿Por qué Podman? La Evolución de los Contenedores
Durante años, Docker fue el estándar para la ejecución de contenedores. Sin embargo, su arquitectura basada en un
demonio centralizado ( dockerd ) con privilegios de superusuario (root) presentó ciertos inconvenientes en entornos de
producción empresarial y de seguridad estricta.
💡 Principales Pilares de Podman
• Daemonless (Sin Demonio): Podman no requiere un servicio en segundo plano ejecutándose permanentemente como
root. Cada contenedor es un proceso hijo directo de la consola o usuario que lo invocó.
• Rootless (Sin privilegios de Root): Permite a usuarios sin privilegios administrativos crear, ejecutar y administrar
contenedores de forma totalmente aislada e independiente.
• Compatibilidad con OCI y Docker: Podman soporta la misma especificación de comandos CLI que Docker. En la mayoría
de los casos, basta con definir alias docker=podman .
• Soporte Nativo de Pods: Hereda directamente la noción de "Pods" de Kubernetes, permitiendo agrupar múltiples
contenedores bajo una misma dirección IP y espacio de red.
Comparativa Visual de Arquitectura
+-----------------------------------------------------------------------+ | ARCHIVOS Y PROCESOS EN PODMAN
vs DOCKER | +-----------------------------------------------------------------------+ | [Docker] CLI --->
Socket /var/run/[Link] ---> Daemon (Root) ---> C1 | | [Podman] CLI (Rootless) ---> Fork Directo del
Proceso ---> Contenedor C1 | +-----------------------------------------------------------------------+
Esta arquitectura elimina el punto único de fallo y previene la escalada no autorizada de privilegios.
Manual de Aprendizaje — Tutorial Básico de Podman Página 1 de 10
2. Arquitectura Interna y Seguridad Rootless
Para comprender el funcionamiento de Podman, es fundamental analizar cómo maneja el aislamiento de usuarios, las
llamadas al sistema y la integración con las tecnologías del kernel de Linux.
Aislamiento mediante User Namespaces (subuid y subgid)
La capacidad de ejecutar contenedores en modo Rootless se basa en la funcionalidad del kernel de Linux llamada User
Namespaces. Esto asigna un rango de identificadores de usuario (UIDs) e identificadores de grupo (GIDs) del sistema host
al usuario no privilegiado.
# Verificar la asignación de UIDs secundarios para el usuario actual
cat /etc/subuid
usuario:100000:65536
# Verificar la asignación de GIDs secundarios
cat /etc/subgid
usuario:100000:65536
Dentro del contenedor, el usuario parece tener el UID 0 (root), pero fuera del contenedor, el kernel traduce ese UID a un ID
no privilegiado (por ejemplo, UID 100000 en el host). Si un atacante logra escapar del contenedor, solo obtendrá los
permisos del usuario sin privilegios en el host.
Tabla Comparativa: Podman vs Docker
Característica Podman Docker
Arquitectura Daemonless (Sin servicio persistente) Cliente-Servidor (Requiere dockerd )
Ejecución Rootless Nativa y por defecto Soportada (requiere configuración)
Gestión de Pods Nativa (similar a Kubernetes) Requiere herramientas externas / Swarm
Integración Systemd Nativa (Quadlets / Servicios systemd) Limitada por el servicio daemon
Exportación K8s Genera YAML de Kubernetes directamente Requiere plugins o conversión externa
Soporte de CLI 100% compatible con comandos Docker Estándar de la industria
⚠️ Requisito importante para Rootless
Para la asignación correcta de recursos de red en modo rootless, Podman utiliza utilidades como slirp4netns o el driver
moderno de red pasta (Netavark), que no requieren privilegios elevados para abrir puertos mayores a 1024.
Manual de Aprendizaje — Tutorial Básico de Podman Página 2 de 10
3. Instalación y Configuración Inicial
Podman está disponible de manera nativa en la mayoría de las distribuciones Linux y se puede ejecutar en macOS y
Windows mediante máquinas virtuales ligeras de Podman Machine.
Instalación en Linux
# En RHEL / Fedora / CentOS Stream / Rocky Linux:
sudo dnf install -y podman
# En Ubuntu / Debian:
sudo apt update && sudo apt install -y podman
# En Arch Linux:
sudo pacman -S podman
Instalación en macOS y Windows (Podman Machine)
En sistemas no-Linux, Podman requiere una máquina virtual ligera basada en Fedora CoreOS para ejecutar el kernel de
Linux.
# Inicializar y arrancar la máquina virtual de Podman
podman machine init
podman machine start
# Verificar el estado de la máquina
podman machine list
Configuración de Registros de Imágenes ([Link])
A diferencia de Docker, que por defecto busca únicamente en Docker Hub, Podman permite configurar múltiples registros
explícitos. La configuración se ajusta en /etc/containers/[Link] o de forma individual por usuario en
~/.config/containers/[Link] .
# Ejemplo de configuración de registros de búsqueda:
unqualified-search-registries = ["[Link]", "[Link]", "[Link]"]
Verificación de la Instalación
podman info
podman version
💡 Creando un Alias de Docker
Si estás acostumbrado a usar el comando docker , añade la siguiente línea a tu archivo ~/.bashrc o ~/.zshrc : alias
docker=podman
Manual de Aprendizaje — Tutorial Básico de Podman Página 3 de 10
4. Gestión Básico de Imágenes
Las imágenes de contenedor son plantillas de solo lectura que contienen el código, las dependencias y la configuración
necesarios para ejecutar una aplicación.
Búsqueda y Descarga de Imágenes
El comando podman search realiza consultas en los registros configurados:
# Buscar una imagen (por ejemplo, Nginx)
podman search nginx
# Descargar (Pull) una imagen explícita
podman pull [Link]/library/nginx:alpine
podman pull [Link]/podman/hello
Listado e Inspección de Imágenes
# Listar todas las imágenes locales
podman images
# Inspeccionar metadatos de una imagen en formato JSON
podman inspect nginx:alpine
# Ver el historial de capas de una imagen
podman history nginx:alpine
Etiquetado y Eliminación de Imágenes
# Asignar una nueva etiqueta (Tag) a una imagen
podman tag nginx:alpine [Link]/web/nginx:v1.0
# Eliminar una imagen del almacenamiento local
podman rmi nginx:alpine
# Limpiar imágenes huérfanas o no utilizadas
podman image prune
Estructura del Almacenamiento Rootless
En modo rootless, Podman almacena las imágenes y contenedores en el directorio personal del usuario: ~/.local/share/
containers/storage/ . Esto garantiza el aislamiento total de datos por usuario.
Manual de Aprendizaje — Tutorial Básico de Podman Página 4 de 10
5. Ciclo de Vida de los Contenedores
Un contenedor es una instancia en ejecución de una imagen OCI. A continuación se presentan los comandos esenciales
para controlar su ciclo de vida completo.
Creación y Ejecución de Contenedores
# Ejecutar un contenedor en segundo plano (detached) expuesto en el puerto 8080
podman run -d --name mi-web -p 8080:80 nginx:alpine
# Ejecutar un contenedor interactivo que se elimine al finalizar
podman run -it --rm alpine sh
Opciones Comunes de podman run
Bandera / Opción Descripción
-d, --detach Ejecuta el contenedor en segundo plano y devuelve el ID.
-p, --publish Mapea un puerto del host al puerto del contenedor (ej. 8080:80 ).
-e, --env Define variables de entorno dentro del contenedor.
--name Asigna un nombre personalizado al contenedor.
--rm Elimina el contenedor automáticamente al detenerse.
-v, --volume Monta un volumen o directorio del host en el contenedor.
Monitoreo y Diagnóstico
# Listar contenedores activos
podman ps
# Listar todos los contenedores (incluyendo detenidos)
podman ps -a
# Ver logs del contenedor
podman logs -f mi-web
# Inspeccionar métricas de consumo de recursos en tiempo real
podman stats mi-web
# Ejecutar un comando dentro de un contenedor en ejecución
podman exec -it mi-web sh
Manual de Aprendizaje — Tutorial Básico de Podman Página 5 de 10
6. Persistencia de Datos y Volúmenes
Por defecto, el sistema de archivos de un contenedor es efímero. Cuando un contenedor se elimina, sus datos se pierden.
Para almacenar información de forma persistente, Podman ofrece dos mecanismos principales: Volúmenes gestionados y
Bind Mounts.
1. Volúmenes Gestionados (Podman Volumes)
Los volúmenes son administrados por Podman y almacenados de manera segura dentro del almacenamiento interno de
Podman.
# Crear un volumen nombrado
podman volume create datos-db
# Listar volúmenes existentes
podman volume ls
# Usar el volumen en un contenedor de PostgreSQL
podman run -d --name mi-postgres -e POSTGRES_PASSWORD=secreto -v datos-db:/var/lib/postgresql/data
postgres:alpine
2. Bind Mounts (Montaje de Directorios Locales)
Permite vincular una carpeta del host directamente con una carpeta dentro del contenedor.
podman run -d --name servidor-web -p 8080:80 -v /home/usuario/mi-sitio:/usr/share/nginx/html:Z
nginx:alpine
🛡️ Manejo de SELinux (:z y :Z)
En distribuciones como RHEL, Fedora o CentOS con SELinux activo, es imprescindible añadir la opción :z o :Z al final
del montaje:
• :z - Configura el contexto de SELinux para que el contenido sea compartido entre múltiples contenedores.
• :Z - Configura el contexto de forma privada y exclusiva para ese contenedor específico.
Manual de Aprendizaje — Tutorial Básico de Podman Página 6 de 10
7. Redes en Podman (Netavark y Pasta)
Podman gestiona la conectividad de red de los contenedores utilizando modernos subsistemas como Netavark (el stack de
red nativo de Podman 4+) y Pasta para entornos rootless.
Tipos de Redes
• Bridge (Puente): Red por defecto. Los contenedores conectados a la misma red puente pueden comunicarse entre sí
mediante su IP o nombre de contenedor.
• Host: El contenedor comparte directamente el espacio de red con el host (sin aislamiento).
• None: El contenedor no tiene interfaz de red externa (aislamiento total).
Creación y Uso de Redes Personalizadas
# Crear una red personalizada
podman network create red-aplicacion
# Listar redes disponibles
podman network ls
# Ejecutar contenedor de Base de Datos en la red
podman run -d --name db --network red-aplicacion -e MYSQL_ROOT_PASSWORD=root mysql:8
# Ejecutar servidor Web en la misma red
podman run -d --name app --network red-aplicacion -p 8080:80 wordpress
Resolución DNS Automática en Redes Personalizadas
En las redes creadas por el usuario, Podman integra un servidor DNS interno. Esto permite que el contenedor app se
conecte a la base de datos usando directamente el nombre del host db en lugar de una dirección IP cambiante.
# Probar la conectividad por nombre entre contenedores
podman exec -it app ping db
Manual de Aprendizaje — Tutorial Básico de Podman Página 7 de 10
8. El Concepto de "Pods" en Podman
Una de las características más innovadoras y potentes de Podman es el concepto de Pod. Un Pod es un grupo de uno o
más contenedores que comparten los mismos recursos de red, almacenamiento y namespaces IP.
¿Cómo funciona un Pod?
El primer contenedor en ser creado dentro de un Pod se llama contenedor Infra. Este contenedor mantiene vivos los
namespaces compartidos mientras otros contenedores de la aplicación se unen a él.
+-----------------------------------------------------------------+ | POD: mi-pod (localhost / Puerto
expuesto: 8080) | | | | +-------------------+ +-----------------------------+ | | | Contenedor Web | <--->
| Contenedor Redis | | | | (Nginx) :80 | | (Cache) :6379 | | | +-------------------+
+-----------------------------+ | | ^ | | +---- Se comunican vía 'localhost' |
+-----------------------------------------------------------------+
Comandos para Trabajar con Pods
# 1. Crear un Pod exponiendo el puerto 8080
podman pod create --name mi-pod -p 8080:80
# 2. Agregar un contenedor web al Pod
podman run -d --name web-app --pod mi-pod nginx:alpine
# 3. Agregar un contenedor de soporte (ej. Redis) al mismo Pod
podman run -d --name cache --pod mi-pod redis:alpine
# 4. Listar pods activos
podman pod ps
# 5. Detener o eliminar un Pod completo y todos sus contenedores
podman pod stop mi-pod
podman pod rm mi-pod
💡 Comunicación en un Pod
Los contenedores dentro del mismo Pod se comunican entre sí a través de localhost (puertos locales), simplificando
notablemente la arquitectura de la aplicación.
Manual de Aprendizaje — Tutorial Básico de Podman Página 8 de 10
9. Integración con Systemd, Quadlets y Kubernetes
Podman se integra de manera nativa con las herramientas estándar de administración de sistemas Linux y orquestación de
contenedores.
Generación de YAML para Kubernetes
Puedes exportar la definición de un contenedor o Pod individual a un manifiesto estándar de Kubernetes:
# Generar YAML compatible con Kubernetes desde un Pod
podman generate kube mi-pod > [Link]
# Desplegar un Pod directamente desde un archivo YAML de Kubernetes
podman play kube [Link]
Administración con Systemd y Quadlets
Podman 4.4+ introdujo Quadlets, la forma moderna y recomendada de gestionar contenedores mediante systemd .
# Crear el archivo de servicio en ~/.config/containers/systemd/[Link]
[Unit]
Description=Servicio Web Nginx de Producción
After=[Link]
[Container]
Image=[Link]/library/nginx:alpine
PublishPort=8080:80
Volume=datos-web:/usr/share/nginx/html:z
[Install]
WantedBy=[Link]
# Recargar systemd para activar el Quadlet
systemctl --user daemon-reload
systemctl --user start mi-web
systemctl --user status mi-web
Manual de Aprendizaje — Tutorial Básico de Podman Página 9 de 10
10. Buenas Prácticas y Resumen de Comandos
Buenas Prácticas de Seguridad
• Aprovecha el modo Rootless: No ejecutes Podman como usuario root a menos que sea estrictamente indispensable.
• Utiliza imágenes ligeras y verificadas: Prefiere distribuciones como Alpine Linux o imágenes de registros oficiales
signados.
• Aplica restricciones de recursos: Define límites de memoria y CPU para prevenir ataques de denegación de servicio.
• Etiquetas SELinux correctas: Mantén SELinux activado en modo Enforcing y usa siempre los modificadores :z o :Z
en tus volúmenes.
Cheatsheet de Comandos Esenciales
Comando Acción / Descripción
podman run -d -p H:C imagen Ejecuta un contenedor en segundo plano con mapeo de puertos.
podman ps -a Muestra todos los contenedores (activos y detenidos).
podman logs -f Muestra los logs en tiempo real de un contenedor.
podman exec -it sh Abre una shell interactiva dentro del contenedor.
podman volume create Crea un volumen gestionado para persistencia.
podman pod create --name
Crea un nuevo Pod para agrupar contenedores.
podman generate kube
Exporta un Pod a formato YAML de Kubernetes.
podman system prune -a Limpia contenedores, imágenes y redes no utilizados.
🎉 ¡Felicidades! Has completado el Tutorial Básico de Podman.
Ahora tienes todos los conocimientos fundamentales para administrar contenedores eficientes, seguros y modernos.
Manual de Aprendizaje — Tutorial Básico de Podman Página 10 de 10