- 1 1. Introducción
- 2 2. ¿Qué es Podman?
- 3 3. Instalando 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 P1. ¿Cuál es la diferencia principal entre Podman y Docker?
- 8.2 P2. ¿Cuál es la diferencia entre Dockerfile y Containerfile?
- 8.3 P3. ¿Se puede usar Docker Compose con Podman?
- 8.4 P4. ¿Podman funciona de forma estable en Ubuntu?
- 8.5 P5. ¿Existen limitaciones al usar el modo sin privilegios?
- 8.6 P6. ¿Puede Podman extraer las mismas imágenes que Docker Hub?
- 8.7 P7. ¿Es Podman adecuado para entornos de producción?
1. Introducción
La evolución de la tecnología de contenedores y por qué es importante
En los últimos años, la importancia de la tecnología de contenedores ha aumentado rápidamente en el desarrollo y operaciones de aplicaciones. En particular, la capacidad de garantizar la reproducibilidad alineando los entornos de desarrollo y producción ha recibido un gran 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 potente. Podman ofrece una CLI (interfaz de línea de comandos) casi idéntica a la de Docker, al tiempo que brinda ventajas clave como una arquitectura sin daemon, operación ligera y ejecución sin privilegios de root sin requerir privilegios de administrador.
¿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 Linux ampliamente utilizada, adecuada tanto para principiantes como para usuarios avanzados,
- Dockerfile sirve como 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 la creciente concienciación sobre la seguridad, usar 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 cuidadosamente cómo crear Dockerfiles y generar 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 deseen gestionar contenedores de forma segura
- Ingenieros que planean adoptar la tecnología de contenedores en su trabajo
- Principiantes que quieran probar a escribir Dockerfiles y construir imágenes con Podman
Además del uso básico, este artículo también cubre consejos de solución de problemas, diferencias clave con Docker y estrategias de migración.
2. ¿Qué es Podman?
Visión general básica 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 crear, 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 privilegios (rootless), lo que permite a usuarios normales 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 más eficiente de los recursos sin servicios de fondo innecesarios.
Soporte sin privilegios (usuario no administrador)
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 casi idénticamente en Podman:
podman build -t myimage .
podman run -it myimage bash
Como resultado, los usuarios de Docker pueden migrar con mínima fricción.
Funcionalidad de Pods
Podman incorpora el concepto de “Pod” de Kubernetes, permitiendo que varios contenedores se gestionen como una única unidad lógica. Esto hace que Podman sea altamente compatible con Kubernetes y permite transiciones fluidas del desarrollo local a entornos en la nube.
Compatibilidad con Ubuntu
Aunque Podman es ampliamente adoptado en Fedora y distribuciones basadas en RHEL, también se ejecuta de manera estable en Ubuntu. Se puede instalar desde repositorios oficiales con una configuración relativamente simple. Desde Ubuntu 20.04 LTS, el soporte de paquetes ha mejorado significativamente, reduciendo la barrera de entrada.
3. Instalando Podman en Ubuntu
Antes de Comenzar: Requisitos Previos
Antes de instalar Podman en Ubuntu, primero verifica la versión de tu Ubuntu. Podman se recomienda oficialmente para Ubuntu 20.04 LTS o posterior. En versiones anteriores, los paquetes requeridos podrían no estar disponibles en los repositorios oficiales.
Puedes verificar la versión de Ubuntu usando el siguiente comando:
lsb_release -a
La instalación de Podman requiere privilegios de sudo. Incluso si planeas usar Podman en modo sin root, se requieren privilegios de administrador durante la instalación.
Instalando 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
Después de la instalación, verifica que Podman se instaló correctamente comprobando la versión:
podman --version
Instalando la Versión Más Reciente Usando el PPA Oficial
La versión de Podman incluida en el repositorio predeterminado de Ubuntu a menudo está ligeramente desactualizada. Si deseas usar las características 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 versiones más recientes de Podman equivalentes a las de los sistemas Red Hat y Fedora.
Prueba de Funcionalidad Básica de Podman
Después de la instalación, realiza una prueba simple para confirmar que Podman funciona correctamente:
podman info
Este comando muestra la configuración de Podman, la versión y las características compatibles 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 exitosamente, 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 construir imágenes de contenedores. Es un archivo de texto que define instrucciones como la imagen base a usar, qué paquetes instalar y qué archivos copiar.
Basado en este archivo, herramientas de contenedores como Podman y Docker pueden construir automáticamente un entorno consistente.
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.
Usando Dockerfile con Podman
Podman puede construir imágenes de contenedores a partir de Dockerfiles de la misma manera que Docker.
1. Preparando el Directorio del Proyecto
Crea la siguiente estructura de directorio:
project/
├── Dockerfile
└── app.sh
El archivo app.sh puede contener un script simple:
#!/bin/bash
echo "Hello from Podman container!"
Haz que el script sea ejecutable:
chmod +x app.sh
2. Construyendo 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 nombrada mypodmanapp.
3. Verificando la Imagen Construida
Puedes listar las imágenes disponibles con:
podman images
4. Ejecutando 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 al arrancar el sistema.
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
Dado que es en gran medida compatible con archivos docker-compose.yml, a menudo puedes reutilizar configuraciones existentes.
Iniciar servicios es tan simple como ejecutar:
podman-compose up -d
Esto te permite reproducir entornos de desarrollo completos de manera instantánea incluso al usar Podman.
Comandos y Consejos Adicionales Útiles
Limpieza de Imágenes y Contenedores No Utilizados
podman system prune -a
Este comando elimina contenedores no utilizados, imágenes y archivos temporales, ayudando a mantener tu almacenamiento limpio.
Habilitación de Autocompletado de Comandos (bash/zsh)
Puedes instalar soporte para autocompletado de comandos con el siguiente paquete:
sudo apt install podman-docker
Esto habilita el autocompletado 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 sinónimo de tecnología de contenedores durante mucho tiempo, 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, lo que ha impulsado a muchas organizaciones a considerar la migración.
Esta sección explica pasos prácticos y consideraciones importantes para migrar de manera fluida de Docker a Podman.
Compatibilidad de Comandos Entre Docker y Podman
Podman mantiene un alto nivel de compatibilidad de CLI con Docker, lo que permite que la mayoría de los comandos se reemplacen directamente sin modificaciones.
| 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, lo que es una de sus mayores ventajas.
Logrando Compatibilidad Total con podman-docker
Si los scripts existentes, pipelines de CI/CD o herramientas asumen la presencia del comando docker, puedes instalar el paquete podman-docker para 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 los scripts basados en Docker existentes se ejecuten en Podman sin modificaciones.
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.
Aunque la compatibilidad es generalmente alta, ten en cuenta las siguientes limitaciones:
- Algunas opciones de Compose (como
depends_on) pueden no ser compatibles o comportarse de manera diferente - Pueden existir diferencias en el registro de eventos y el comportamiento de las verificaciones de salud
Para configuraciones típicas como una combinación de servidor web y base de datos, la migración suele ser directa.
Migración de Imágenes y Volúmenes
Las imágenes de Docker almacenadas localmente no pueden ser accedidas directamente por Podman. Debes 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 para la Migración
- Diferencias en la operación sin root: Docker típicamente asume el uso de root, mientras que Podman está diseñado para operación sin root
- Arquitectura de daemon: Podman es sin daemon, lo que cambia la forma en que se gestionan los procesos en segundo plano
- Ubicaciones de almacenamiento de registros y datos difieren y deben revisarse durante la migración
8. Preguntas Frecuentes (FAQ)
P1. ¿Cuál es la diferencia principal entre Podman y Docker?
R1. La diferencia más significativa es que Podman funciona sin un daemon. Esto permite una operación más ligera y segura. Podman también admite el modo sin privilegios (rootless), lo que permite gestionar contenedores sin escalado de privilegios. La compatibilidad de la CLI con Docker es muy alta.
P2. ¿Cuál es la diferencia entre Dockerfile y Containerfile?
R2. No hay ninguna diferencia funcional. Ambos archivos describen 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.
P3. ¿Se puede usar Docker Compose con Podman?
R3. 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 en configuraciones complejas.
P4. ¿Podman funciona de forma estable en Ubuntu?
R4. Sí. Podman funciona de forma 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.
P5. ¿Existen limitaciones al usar el modo sin privilegios?
R5. 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.
P6. ¿Puede Podman extraer las mismas imágenes que Docker Hub?
R6. Sí. Podman puede extraer 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 admite otros registros como Quay.io y GitHub Container Registry.
P7. ¿Es Podman adecuado para entornos de producción?
R7. Sí. Podman incluye características requeridas para 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 tiene una amplia adopción en producción.



