- 1 1. Introducción
- 2 2. ¿Qué es Podman?
- 3 3. Instalación de Podman en Ubuntu
- 4 4. Conceptos básicos de Dockerfile y uso con Podman
- 5 5. Ejemplo Práctico: Creando un Contenedor Basado en Ubuntu
- 6 6. Características y Consejos Útiles de Podman
- 7 7. Guía de Migración: De Docker a Podman
- 8 8. Preguntas frecuentes (FAQ)
- 8.1 Q1. ¿Cuál es la principal diferencia entre Podman y Docker?
- 8.2 Q2. ¿Cuál es la diferencia entre Dockerfile y Containerfile?
- 8.3 Q3. ¿Se puede usar Docker Compose con Podman?
- 8.4 Q4. ¿Podman funciona de manera estable en Ubuntu?
- 8.5 Q5. ¿Existen limitaciones al usar el modo sin privilegios?
- 8.6 Q6. ¿Podman puede descargar las mismas imágenes que Docker Hub?
- 8.7 Q7. ¿Es Podman adecuado para entornos de producción?
1. Introducción
La evolución de la tecnología de contenedores y por qué importa
En los últimos años, la importancia de la tecnología de contenedores ha aumentado rápidamente en el desarrollo y las operaciones de aplicaciones. En particular, la capacidad de garantizar la reproducibilidad alineando los entornos de desarrollo y producción ha ganado un fuerte apoyo entre los ingenieros.
Docker ha sido durante mucho tiempo la solución dominante en este ámbito, pero en los últimos años, Podman ha surgido como una alternativa poderosa. Podman ofrece una CLI (Interfaz de Línea de Comandos) casi idéntica a la de Docker, al tiempo que proporciona ventajas clave como una arquitectura sin daemon, operación ligera y ejecución sin root sin requerir privilegios de root.
¿Por qué “Podman + Dockerfile + Ubuntu”?
Este artículo explica las operaciones modernas de contenedores en Linux combinando tres elementos esenciales: Podman, Dockerfile y Ubuntu.
- Ubuntu es una distribución de Linux ampliamente utilizada, adecuada tanto para principiantes como para usuarios avanzados,
- Dockerfile sirve como un plano para construir imágenes de contenedores,
- Y Podman es una herramienta de próxima generación que permite una gestión de contenedores más flexible y segura.
Con el aumento de la conciencia sobre la seguridad, el uso de Podman con Dockerfile en Ubuntu se ha convertido en una opción popular tanto para desarrolladores individuales como para entornos empresariales.
Propósito y público objetivo
El objetivo de este artículo es explicar detalladamente cómo construir Dockerfiles y crear contenedores prácticos usando Podman en Ubuntu.
Este artículo está dirigido a lectores como:
- Aquellos con experiencia en Docker que están interesados en Podman
- Usuarios de Ubuntu que desean gestionar contenedores de manera segura
- Ingenieros que planean adoptar la tecnología de contenedores en su trabajo
- Principiantes que desean probar la escritura de Dockerfiles y la construcción de imágenes con Podman
Además del uso básico, este artículo también cubre consejos de resolución de problemas, diferencias clave con Docker y estrategias de migración.
2. ¿Qué es Podman?
Resumen básico de Podman
Podman (Pod Manager) es una herramienta de gestión de contenedores de próxima generación desarrollada por la comunidad liderada por Red Hat. Al igual que Docker, puede construir, ejecutar y gestionar contenedores compatibles con OCI (Open Container Initiative), pero su filosofía de diseño y arquitectura difieren significativamente.
La característica más notable es que Podman no requiere un daemon. Esto permite una operación ligera y segura. Podman también soporta el modo sin root, lo que permite a usuarios regulares gestionar contenedores sin escalada de privilegios. Su compatibilidad de CLI con Docker es muy alta, lo que hace que la migración sea sencilla.
Características clave de Podman
A continuación, se presentan algunas de las principales características de Podman:
Arquitectura sin daemon
Podman no depende de un proceso daemon en segundo plano para gestionar contenedores. Esto permite un uso de recursos más eficiente sin servicios en segundo plano innecesarios.
Soporte para rootless (usuario sin privilegios)
Podman permite que usuarios no administradores inicien y gestionen contenedores. Esto mejora enormemente la seguridad en entornos multiusuario o de servidor y reduce significativamente los riesgos de seguridad.
CLI compatible con Docker
Podman utiliza casi la misma estructura de comandos que Docker. Por ejemplo, los siguientes comandos de Docker funcionan de manera casi idéntica en Podman:
podman build -t myimage .
podman run -it myimage bash
Como resultado, los usuarios de Docker pueden migrar con fricción mínima.
Funcionalidad de Pod
Podman incorpora el concepto de “Pod” de Kubernetes, lo que permite gestionar múltiples contenedores como una sola unidad lógica. Esto hace que Podman sea altamente compatible con Kubernetes y habilite transiciones suaves desde el desarrollo local hasta entornos en la nube.
Compatibilidad con Ubuntu
Aunque Podman está ampliamente adoptado en Fedora y distribuciones basadas en RHEL, también funciona de forma estable en Ubuntu. Puede instalarse desde los repositorios oficiales con una configuración relativamente sencilla. Desde Ubuntu 20.04 LTS, el soporte de paquetes ha mejorado significativamente, reduciendo la barrera de entrada.
3. Instalación de Podman en Ubuntu
Antes de comenzar: requisitos previos
Antes de instalar Podman en Ubuntu, verifica primero la versión de tu sistema. Podman se recomienda oficialmente para Ubuntu 20.04 LTS o posterior. En versiones más antiguas, los paquetes necesarios pueden no estar disponibles en los repositorios oficiales.
Puedes comprobar la versión de Ubuntu con el siguiente comando:
lsb_release -a
Instalar Podman requiere privilegios de sudo. Incluso si planeas usar Podman en modo sin root, se necesitan privilegios de administrador durante la instalación.
Instalación de Podman desde el repositorio oficial de Ubuntu
En versiones recientes de Ubuntu, como 20.04 o 22.04, Podman se puede instalar fácilmente usando APT.
sudo apt update
sudo apt install -y podman
Tras la instalación, verifica que Podman se haya instalado correctamente comprobando la versión:
podman --version
Instalación de la última versión mediante el PPA oficial
La versión de Podman incluida en el repositorio predeterminado de Ubuntu suele estar ligeramente desactualizada. Si deseas usar las funcionalidades más recientes, puedes instalar Podman desde el PPA oficial.
. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt update
sudo apt install -y podman
Este método te permite usar las últimas versiones de Podman equivalentes a las de los sistemas Red Hat y Fedora.
Prueba básica de la funcionalidad de Podman
Después de la instalación, realiza una prueba sencilla para confirmar que Podman funciona correctamente:
podman info
Este comando muestra la configuración de Podman, su versión y las características admitidas, como el modo sin root.
También puedes probar la ejecución de contenedores ejecutando una imagen oficial de Alpine Linux:
podman run --rm -it alpine sh
Si el shell se inicia con éxito, Podman está funcionando correctamente.
4. Conceptos básicos de Dockerfile y uso con Podman
¿Qué es un Dockerfile?
Un Dockerfile es un plano utilizado para crear imágenes de contenedores. Es un archivo de texto que define instrucciones como la imagen base a usar, los paquetes a instalar y los archivos a copiar.
A partir de este archivo, herramientas de contenedores como Podman y Docker pueden construir automáticamente un entorno coherente.
Algunas instrucciones comunes de Dockerfile incluyen:
FROM ubuntu:22.04
RUN apt update && apt install -y curl
COPY ./app.sh /usr/local/bin/app.sh
CMD ["bash", "/usr/local/bin/app.sh"]
Este ejemplo instala paquetes en una imagen base de Ubuntu, copia un script y define el comando de ejecución predeterminado.
Uso de Dockerfile con Podman
Podman puede crear imágenes de contenedores a partir de Dockerfiles de la misma manera que Docker.
1. Preparar el directorio del proyecto
Crea la siguiente estructura de directorios:
project/
├── Dockerfile
└── app.sh
El archivo app.sh puede contener un script sencillo:
#!/bin/bash
echo "Hello from Podman container!"
Haz que el script sea ejecutable:
chmod +x app.sh
2. Construir la imagen con Podman
Ejecuta el siguiente comando en el directorio que contiene el Dockerfile:
podman build -t mypodmanapp .
Esto crea una imagen de contenedor llamada mypodmanapp.
3. Verificar la imagen construida
Puedes listar las imágenes disponibles con:
podman images
4. Ejecutar el contenedor
Inicia un contenedor usando la imagen construida:
podman run --rm mypodmanapp
Si se configura correctamente, se mostrará la salida Hello from Podman container!.
Dockerfile vs Containerfile
En Podman, los archivos que utilizan la sintaxis de Dockerfile también pueden llamarse Containerfile. Esta denominación refleja un deseo de terminología independiente de Docker.
No hay diferencia funcional entre Dockerfile y Containerfile. Ambos son completamente compatibles con Podman.
podman build -f Containerfile -t myimage .
Puedes especificar el nombre del archivo explícitamente usando la opción -f.
5. Ejemplo Práctico: Creando un Contenedor Basado en Ubuntu
Creando un Dockerfile Basado en Ubuntu
A partir de aquí, recorreremos un ejemplo práctico, paso a paso, de crear un Dockerfile basado en Ubuntu y construir y ejecutar una imagen de contenedor usando Podman.
Primero, crea el siguiente Dockerfile simple:
FROM ubuntu:22.04
RUN apt update && \
apt install -y curl && \
apt clean
COPY hello.sh /usr/local/bin/hello.sh
RUN chmod +x /usr/local/bin/hello.sh
CMD ["/usr/local/bin/hello.sh"]
Este Dockerfile realiza las siguientes acciones:
- Usa la imagen oficial de Ubuntu 22.04 como base
- Instala el paquete
curl - Copia
hello.shdel host al contenedor - Establece
hello.shcomo el script de ejecución predeterminado
Siguiente, crea un script de shell simple llamado hello.sh:
#!/bin/bash
echo "Hello, this output is from a Podman container!"
Otorga permisos de ejecución al script:
chmod +x hello.sh
Construyendo la Imagen con Podman
Una vez que los archivos estén listos, construye la imagen usando el siguiente comando:
podman build -t ubuntu-hello .
La opción -t ubuntu-hello asigna un nombre de etiqueta a la imagen, y el . final especifica el directorio que contiene el Dockerfile.
Si la construcción se completa exitosamente, la imagen se almacenará localmente.
podman images
Puedes usar este comando para verificar que la imagen fue creada.
Ejecutando y Verificando la Imagen Construida
Ejecuta un contenedor desde la imagen recién construida usando el siguiente comando:
podman run --rm ubuntu-hello
Salida de ejemplo:
Hello, this output is from a Podman container!
La opción --rm elimina automáticamente el contenedor después de la ejecución, lo que la hace ideal para fines de prueba.
Opcional: Ejecutando un Contenedor Interactivo
Si deseas interactuar directamente con el contenedor, puedes iniciarlo con la opción -it y lanzar Bash:
podman run -it ubuntu-hello bash
Esto te permite usar el contenedor como un entorno de desarrollo ligero basado en Ubuntu.
6. Características y Consejos Útiles de Podman
Fortalezas de Podman: Flexibilidad y Seguridad
Mientras mantiene la compatibilidad con Docker, Podman ofrece características que permiten operaciones de contenedor más flexibles y seguras. Esta sección introduce características prácticas y consejos que son especialmente útiles en flujos de trabajo diarios.
Operación Segura con Modo Sin Root
Una de las características más poderosas de Podman es el modo sin root, que permite a usuarios regulares iniciar, detener y gestionar contenedores sin privilegios de administrador.
Puedes ejecutar contenedores sin sudo como se muestra a continuación:
podman run -it ubuntu bash
Debido a que esta operación está confinada al directorio home del usuario, se minimiza el impacto a nivel del sistema. El modo sin root es particularmente útil en servidores compartidos y entornos de desarrollo.
Inicio Automático con Integración de systemd
Podman soporta integración nativa con systemd, permitiendo que los contenedores se ejecuten automáticamente como servicios de Linux.
Puedes generar una unidad de servicio systemd para un contenedor usando el siguiente comando:
podman generate systemd --name mycontainer --files --restart-policy=always
Este comando crea archivos de unidad bajo ~/.config/systemd/user/. Después de la generación, habilita y inicia el servicio de la siguiente manera:
systemctl --user daemon-reexec
systemctl --user enable --now container-mycontainer.service
Esta configuración asegura que los contenedores se inicien automáticamente cuando el sistema arranca.
Gestión de Múltiples Contenedores con podman-compose
Además de gestionar contenedores individuales, Podman soporta orquestación de múltiples contenedores. Al usar podman-compose, puedes lograr una funcionalidad similar a Docker Compose.
Instala podman-compose usando pip:
pip install podman-compose
Debido a que es en gran medida compatible con archivos docker-compose.yml, puedes reutilizar a menudo configuraciones existentes.
Iniciar servicios es tan simple como ejecutar:
podman-compose up -d
Esto te permite reproducir entornos de desarrollo completos instantáneamente incluso cuando usas Podman.
Comandos y Consejos Adicionales Útiles
Limpieza de Imágenes y Contenedores No Utilizados
podman system prune -a
Este comando elimina contenedores, imágenes y archivos temporales no utilizados, ayudando a mantener tu almacenamiento limpio.
Habilitación de Completado de Comandos (bash/zsh)
Puedes instalar soporte para completado de comandos con el siguiente paquete:
sudo apt install podman-docker
Esto habilita completado de comandos similar a Docker para Podman, mejorando la productividad.
7. Guía de Migración: De Docker a Podman
Por Qué la Migración a Podman Está Ganando Atención
Docker ha sido durante mucho tiempo sinónimo de tecnología de contenedores, pero en los últimos años, un cambio hacia Podman como una alternativa más ligera y segura ha ganado impulso. En particular, Red Hat Enterprise Linux (RHEL) y Fedora han reducido el soporte para Docker y han adoptado Podman como el motor de contenedores predeterminado, impulsando a muchas organizaciones a considerar la migración.
Esta sección explica pasos prácticos y consideraciones importantes para migrar sin problemas de Docker a Podman.
Compatibilidad de Comandos Entre Docker y Podman
Podman mantiene un alto nivel de compatibilidad CLI con Docker, permitiendo que la mayoría de los comandos se reemplacen directamente sin modificación.
| Docker | Podman |
|---|---|
docker build -t myapp . | podman build -t myapp . |
docker run -it myapp | podman run -it myapp |
docker images | podman images |
docker ps | podman ps |
Esto hace posible cambiar a Podman sin alterar tu flujo de trabajo, que es una de sus mayores ventajas.
Logrando Compatibilidad Total con podman-docker
Si scripts existentes, pipelines CI/CD o herramientas asumen la presencia del comando docker, puedes instalar el paquete podman-docker para hacer que Podman actúe como un reemplazo directo.
sudo apt install podman-docker
Después de la instalación, el comando docker se convierte en un enlace simbólico a Podman:
which docker
# → /usr/bin/docker → symbolic link to podman
Esto permite que scripts basados en Docker existentes se ejecuten en Podman sin modificación.
Reemplazando docker-compose con podman-compose
Para proyectos que usan Docker Compose para definir entornos de múltiples contenedores, podman-compose proporciona una alternativa compatible.
Mientras que la compatibilidad es generalmente alta, nota las siguientes limitaciones:
- Algunas opciones de Compose (como
depends_on) pueden no ser soportadas o comportarse de manera diferente - Pueden existir diferencias en el registro de eventos y el comportamiento de verificación de salud
Para configuraciones típicas como una combinación de servidor web y base de datos, la migración suele ser directa.
Migrando Imágenes y Volúmenes
Las imágenes de Docker almacenadas localmente no pueden ser accedidas directamente por Podman. Debes o bien volver a descargarlas o exportarlas e importarlas.
Opción 1: Volver a Descargar Imágenes con Podman
podman pull ubuntu:22.04
Opción 2: Exportar desde Docker e Importar en Podman
# Export from Docker
docker save myimage > myimage.tar
# Import into Podman
podman load < myimage.tar
Esto permite reutilizar imágenes construidas con Docker en Podman.
Consideraciones Adicionales de Migración
- Diferencias en operación sin root : Docker típicamente asume uso de root, mientras que Podman está diseñado para operación sin root
- Arquitectura de daemon : Podman es sin daemon, cambiando cómo se gestionan los procesos en segundo plano
- Las ubicaciones de almacenamiento de logs y datos difieren y deben revisarse durante la migración
8. Preguntas frecuentes (FAQ)
Q1. ¿Cuál es la principal diferencia entre Podman y Docker?
A1. La diferencia más importante es que Podman funciona sin un daemon. Esto permite una operación más ligera y segura. Podman también soporta el modo sin privilegios (rootless), lo que permite gestionar contenedores sin escalar privilegios. La compatibilidad de la CLI con Docker es muy alta.
Q2. ¿Cuál es la diferencia entre Dockerfile y Containerfile?
A2. No hay ninguna diferencia funcional. Ambos archivos describen las instrucciones de construcción de contenedores usando una sintaxis idéntica. El nombre Containerfile se prefiere en proyectos compatibles con OCI para evitar la terminología específica de Docker. En la práctica, Dockerfile funciona perfectamente con Podman.
Q3. ¿Se puede usar Docker Compose con Podman?
A3. Docker Compose no es compatible directamente, pero puedes usar podman-compose como alternativa. Interpreta archivos docker-compose.yml en un entorno Podman.
Algunas opciones, como depends_on, son limitadas, por lo que se recomienda probar la configuración en entornos complejos.
Q4. ¿Podman funciona de manera estable en Ubuntu?
A4. Sí. Podman funciona de manera estable en Ubuntu 20.04 LTS y versiones posteriores. Está disponible en los repositorios oficiales de Ubuntu y puede instalarse fácilmente usando apt. Para versiones más recientes, también es una opción usar un PPA.
Q5. ¿Existen limitaciones al usar el modo sin privilegios?
A5. El modo sin privilegios restringe ciertas operaciones privilegiadas y la vinculación a puertos por debajo del 1024. Sin embargo, estas limitaciones a menudo pueden sortearse mediante reenvío de puertos. Para la mayoría de los casos de uso, el modo sin privilegios es totalmente práctico.
Q6. ¿Podman puede descargar las mismas imágenes que Docker Hub?
A6. Sí. Podman puede descargar imágenes de Docker Hub por defecto. En algunos entornos, puede ser necesario especificar explícitamente el registro y el espacio de nombres:
podman pull docker.io/library/ubuntu
Podman también soporta otros registros como Quay.io y GitHub Container Registry.
Q7. ¿Es Podman adecuado para entornos de producción?
A7. Sí. Podman incluye características necesarias para su uso en producción, como conceptos de pods compatibles con Kubernetes e integración con systemd. En entornos sensibles a la seguridad, Podman puede ser una mejor opción que Docker.
Podman ya es el motor de contenedores predeterminado en RHEL y Fedora y cuenta con una amplia adopción en producción.



