- 1 1. Introducción
- 2 2. ¿Qué es Podman?
- 3 3. Cómo instalar Podman en Ubuntu
- 4 4. Conceptos básicos de Dockerfile y su uso con Podman
- 5 5. Práctica: crear un contenedor basado en Ubuntu
- 6 6. Funciones útiles y consejos de Podman
- 7 7. Guía de migración de Docker a Podman
- 8 8. Preguntas frecuentes (FAQ)
- 8.1 Q1. ¿Cuáles son las principales diferencias entre Podman y Docker?
- 8.2 Q2. ¿En qué se diferencian Dockerfile y Containerfile?
- 8.3 Q3. ¿Puedo usar Docker Compose con Podman?
- 8.4 Q4. ¿Podman funciona de manera estable en Ubuntu?
- 8.5 Q5. ¿Existen limitaciones al usar el modo rootless?
- 8.6 Q6. ¿Podman puede descargar imágenes desde Docker Hub?
- 8.7 Q7. ¿Podman es apto para producción?
- 9 Enlaces de referencia
1. Introducción
La evolución de la tecnología de contenedores y su creciente relevancia
En los últimos años, la importancia de la tecnología de contenedores ha aumentado rápidamente en los entornos de desarrollo y operaciones de aplicaciones. En particular, la capacidad de hacer coincidir los entornos de desarrollo y producción, garantizando la reproducibilidad del funcionamiento, ha sido ampliamente respaldada por muchos ingenieros.
Entre las soluciones más representativas se encuentra Docker, pero en los últimos tiempos Podman ha ganado atención como una alternativa destacada. Podman ofrece casi la misma interfaz de línea de comandos (CLI) que Docker, pero con características únicas como ser daemonless y ligero, además de funcionar sin privilegios de root (rootless).
¿Por qué “Podman + Dockerfile + Ubuntu”?
En este artículo, combinaremos tres elementos clave: Podman, Dockerfile y Ubuntu para explicar cómo gestionar contenedores modernos en un entorno Linux.
- Ubuntu es una de las distribuciones Linux más populares, utilizada tanto por principiantes como por expertos,
- Dockerfile puede considerarse como el plano para construir imágenes de contenedor,
- y Podman es la herramienta de nueva generación que permite gestionarlos de manera más flexible y segura.
En particular, con la creciente conciencia sobre la seguridad, la combinación de usar Podman en Ubuntu junto con Dockerfile está siendo adoptada tanto por desarrolladores individuales como por equipos de empresas.
Objetivo y audiencia de este artículo
El objetivo de este artículo es explicar paso a paso cómo construir un Dockerfile con Podman en un entorno Ubuntu para crear contenedores prácticos.
Está dirigido a las siguientes personas:
- Quienes ya tienen experiencia con Docker pero sienten curiosidad por Podman
- Usuarios de Ubuntu que desean trabajar con contenedores en un entorno más seguro
- Ingenieros que buscan integrar tecnología de contenedores en sus proyectos
- Principiantes que desean experimentar con la escritura de Dockerfiles y la construcción con Podman
El artículo cubre desde el uso básico hasta consejos para evitar problemas, además de las diferencias y el proceso de migración desde Docker.
2. ¿Qué es Podman?
Descripción general de Podman
Podman (Pod Manager) es una herramienta de gestión de contenedores de nueva generación desarrollada por una comunidad liderada por Red Hat. Al igual que Docker, puede compilar, ejecutar y administrar contenedores compatibles con la OCI (Open Container Initiative), pero su filosofía de diseño y arquitectura presentan diferencias importantes.
La principal característica es que Podman no requiere un daemon. Esto permite una operación más ligera y segura. Además, Podman es compatible con el modo rootless, lo que significa que los usuarios sin privilegios administrativos pueden manejar contenedores. Su compatibilidad con la CLI es muy alta y los comandos básicos son prácticamente los mismos que en Docker.
Características principales de Podman
A continuación se destacan algunas de las características más representativas de Podman.
Arquitectura sin daemon
Podman no cuenta con un daemon (proceso en segundo plano) para la gestión de contenedores. Esto evita procesos innecesarios en ejecución y permite un entorno más eficiente en el uso de recursos.
Compatibilidad con usuarios sin privilegios (rootless)
Podman permite que usuarios sin privilegios administrativos inicien y gestionen contenedores. Esto facilita la operación segura en entornos multiusuario o servidores, reduciendo significativamente los riesgos de seguridad.
CLI compatible con Docker
Podman utiliza prácticamente la misma sintaxis de comandos que Docker. Por ejemplo, los siguientes comandos de Docker funcionan de igual manera en Podman:
podman build -t myimage .
podman run -it myimage bash
De esta forma, quienes tienen experiencia con Docker pueden migrar sin dificultad.
Funcionalidad de pods
Podman incorpora el concepto de Pod de Kubernetes, lo que permite agrupar y gestionar varios contenedores como una sola unidad lógica. Esto facilita la integración con Kubernetes y permite una transición fluida desde entornos locales de desarrollo hasta la nube.
Compatibilidad con Ubuntu
Aunque Podman se adopta activamente en Fedora y distribuciones basadas en RHEL, también funciona de manera estable en Ubuntu. Puede instalarse desde los repositorios oficiales y su configuración es relativamente sencilla. En particular, a partir de Ubuntu 20.04 LTS, los paquetes están bien mantenidos y la instalación es mucho más accesible.
3. Cómo instalar Podman en Ubuntu
Antes de comenzar: puntos a verificar
Antes de instalar Podman en Ubuntu, primero verifica la versión del sistema. Se recomienda su uso en Ubuntu 20.04 LTS o posterior. En versiones más antiguas, es posible que los paquetes necesarios no estén disponibles en los repositorios oficiales.
Puedes verificar la versión de Ubuntu con el siguiente comando:
lsb_release -a
Además, la instalación de Podman requiere privilegios de sudo
. Incluso si se usará en modo rootless, durante la instalación inicial se necesitan permisos de administrador, por lo que conviene tenerlos preparados de antemano.
Instalación desde el repositorio oficial de Ubuntu
En versiones recientes como Ubuntu 20.04 o 22.04, Podman puede instalarse fácilmente mediante APT:
sudo apt update
sudo apt install -y podman
Una vez completada la instalación, verifica la versión instalada con:
podman --version
Instalación de la última versión mediante PPA oficial
El Podman disponible en los repositorios estándar de Ubuntu suele estar algo desactualizado. Si deseas acceder a las funciones más recientes, puedes añadir el PPA oficial (Personal Package Archive):
. /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
De esta forma podrás usar la versión más reciente de Podman, al mismo nivel que en distribuciones basadas en Red Hat o Fedora.
Prueba básica de funcionamiento
Tras la instalación, realiza una verificación rápida:
podman info
Este comando muestra la versión, configuraciones y funciones soportadas (como el modo rootless).
Además, prueba descargar y ejecutar una imagen oficial de Alpine Linux:
podman run --rm -it alpine sh
Si se abre correctamente el shell, significa que la instalación de Podman es funcional.
4. Conceptos básicos de Dockerfile y su uso con Podman
¿Qué es un Dockerfile?
Dockerfile es un plano para construir imágenes de contenedor. Es un archivo de texto en el que se especifica, en forma de instrucciones, qué imagen base usar, qué paquetes instalar, qué archivos copiar y qué procesos ejecutar.
A partir de este archivo, herramientas como Podman o Docker pueden construir entornos consistentes de forma automática.
Ejemplo de instrucciones típicas:
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 flujo consiste en usar una imagen base de Ubuntu, instalar paquetes, copiar un script y definir qué comando ejecutar por defecto.
Cómo usar Dockerfile con Podman
Podman permite construir imágenes de contenedor a partir de un Dockerfile. El proceso es casi idéntico al de Docker.
1. Preparar el directorio
Organiza los archivos de la siguiente manera:
project/
├── Dockerfile
└── app.sh
app.sh
puede contener algo sencillo como:
#!/bin/bash
echo "Hello from Podman container!"
No olvides otorgar permisos de ejecución:
chmod +x app.sh
2. Construcción con Podman
En el directorio donde se encuentra el Dockerfile, ejecuta:
podman build -t mypodmanapp .
Esto creará una imagen llamada mypodmanapp
.
3. Verificar la imagen
Consulta las imágenes creadas con:
podman images
4. Ejecutar el contenedor
Inicia el contenedor con la imagen construida:
podman run --rm mypodmanapp
Si todo está correcto, deberías ver la salida: Hello from Podman container!
.
Diferencias con Containerfile
En Podman, un archivo con la misma sintaxis que Dockerfile puede llamarse Containerfile. La idea es usar un nombre neutral que no dependa de Docker.
No obstante, no hay ninguna diferencia funcional. Tanto Dockerfile
como Containerfile
son reconocidos por Podman.
podman build -f Containerfile -t myimage .
Con la opción -f
, puedes indicar cualquier nombre de archivo.
5. Práctica: crear un contenedor basado en Ubuntu
Crear un Dockerfile basado en Ubuntu
Ahora, veamos paso a paso cómo crear un Dockerfile basado en Ubuntu y construir/ejecutar la imagen con Podman.
Ejemplo de 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 archivo hace lo siguiente:
- Usa la imagen oficial de Ubuntu 22.04
- Instala el paquete
curl
- Copia el script
hello.sh
en el contenedor - Define
hello.sh
como comando por defecto
Ejemplo de hello.sh
:
#!/bin/bash
echo "¡Hola desde el contenedor Podman!"
Asigna permisos de ejecución:
chmod +x hello.sh
Construcción de la imagen con Podman
Ejecuta:
podman build -t ubuntu-hello .
La opción -t
asigna una etiqueta a la imagen. El .
indica el directorio actual.
Verifica la imagen creada:
podman images
Ejecutar y probar la imagen
Ejecuta el contenedor:
podman run --rm ubuntu-hello
Salida esperada:
¡Hola desde el contenedor Podman!
La opción --rm
elimina el contenedor al finalizar, ideal para pruebas.
Ejecutar un contenedor interactivo
Si deseas entrar en el contenedor, ejecuta:
podman run -it ubuntu-hello bash
De esta forma puedes usarlo como un entorno ligero de desarrollo basado en Ubuntu.
6. Funciones útiles y consejos de Podman
La fortaleza de Podman: flexibilidad y seguridad
Podman, manteniendo la compatibilidad con Docker, ofrece una operación más flexible y segura. Aquí exploramos funciones prácticas y consejos útiles para el día a día.
Modo rootless para una operación segura
Una de las características más destacadas de Podman es el modo rootless. Este permite que usuarios sin privilegios administrativos puedan iniciar, detener y gestionar contenedores.
Ejemplo de uso sin sudo
:
podman run -it ubuntu bash
Las operaciones se limitan al directorio del usuario, lo que minimiza el impacto en el sistema. Es especialmente útil en servidores compartidos y entornos de desarrollo colaborativo.
Integración con systemd para inicio automático
Podman permite una integración nativa con systemd, facilitando que los contenedores se inicien como servicios al arrancar el sistema.
Ejemplo: generar un servicio systemd desde un contenedor:
podman generate systemd --name mycontainer --files --restart-policy=always
Esto crea archivos de unidad en ~/.config/systemd/user/
. Luego se pueden habilitar así:
systemctl --user daemon-reexec
systemctl --user enable --now container-mycontainer.service
De esta manera, los contenedores se reinician automáticamente tras un reinicio del servidor.
Gestión de múltiples contenedores con podman-compose
Además de contenedores individuales, Podman puede gestionar múltiples contenedores como un conjunto. Con podman-compose es posible manejar configuraciones complejas al estilo de Docker Compose.
Instalación con pip:
pip install podman-compose
Es altamente compatible con docker-compose.yml
, por lo que proyectos existentes pueden reutilizarse.
Ejemplo de ejecución:
podman-compose up -d
Así, con Podman también es posible reproducir entornos completos de desarrollo en segundos.
Otros comandos y consejos útiles
Limpieza de imágenes y contenedores no utilizados
podman system prune -a
Elimina archivos temporales, imágenes y contenedores no utilizados, liberando espacio en disco.
Autocompletado en bash/zsh
Podman ofrece scripts de autocompletado que facilitan el trabajo:
sudo apt install podman-docker
Esto habilita el autocompletado y permite que el comando podman
funcione de forma similar a docker
.
7. Guía de migración de Docker a Podman
¿Por qué considerar la migración a Podman?
Durante mucho tiempo Docker fue sinónimo de contenedores. Sin embargo, hoy en día muchos entornos migran a Podman por ser más ligero y seguro. En Red Hat Enterprise Linux (RHEL) y Fedora, Docker ha perdido soporte oficial y Podman es ahora el estándar, lo que acelera la adopción.
En esta sección se explican los pasos concretos y precauciones para una migración fluida de Docker a Podman.
Compatibilidad de comandos entre Docker y Podman
Gracias a su alta compatibilidad, la mayoría de comandos Docker se pueden usar en Podman sin cambios:
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 que la migración sea casi transparente para los usuarios de Docker.
Compatibilidad total con podman-docker
Si tus scripts o pipelines usan explícitamente el comando docker
, puedes instalar el paquete podman-docker
para garantizar la compatibilidad total:
sudo apt install podman-docker
Esto crea un enlace simbólico de docker
hacia podman
:
which docker
# → /usr/bin/docker → enlace a podman
De esta forma, puedes seguir usando tus scripts sin modificaciones.
Alternativa a docker-compose: podman-compose
En proyectos donde se utilizan múltiples contenedores definidos con Docker Compose, es posible usar podman-compose
para lograr un funcionamiento similar en Podman.
Aunque la compatibilidad es alta, existen algunas diferencias que conviene tener en cuenta:
- Algunas opciones como
depends_on
no están completamente soportadas o presentan diferencias en su comportamiento - Los registros de eventos y verificaciones de estado (health checks) pueden comportarse de manera distinta
En configuraciones simples (por ejemplo, servidor web + base de datos), la migración suele ser fluida.
Migración de imágenes y volúmenes
Las imágenes locales de Docker no son visibles directamente desde Podman. Existen dos alternativas para migrarlas:
Opción 1: volver a descargar con Podman
podman pull ubuntu:22.04
Opción 2: exportar desde Docker e importar en Podman
# Exportar desde Docker
docker save myimage > myimage.tar
# Importar en Podman
podman load < myimage.tar
De esta forma, las imágenes creadas en Docker también pueden usarse en Podman.
Otros aspectos a considerar
- Diferencias en rootless: Docker está pensado principalmente para root, mientras que Podman permite uso estándar sin privilegios
- Estructura de daemon: Docker requiere un servicio en segundo plano, Podman no
- Ubicación de logs y datos: varía según la herramienta, por lo que conviene revisar configuraciones al migrar
8. Preguntas frecuentes (FAQ)
Q1. ¿Cuáles son las principales diferencias entre Podman y Docker?
A1. La diferencia más importante es que Podman no necesita un daemon, lo que permite operaciones más ligeras y seguras. También es compatible con modo rootless, lo que facilita la gestión de contenedores sin privilegios administrativos. La CLI es prácticamente idéntica a la de Docker.
Q2. ¿En qué se diferencian Dockerfile y Containerfile?
A2. No hay diferencias funcionales. Ambos describen el proceso de construcción de una imagen y usan la misma sintaxis. La denominación Containerfile se prefiere en proyectos que buscan un término neutral y no dependiente de Docker. En la práctica, puedes usar Dockerfile sin problemas.
Q3. ¿Puedo usar Docker Compose con Podman?
A3. No directamente, pero puedes usar la herramienta podman-compose
. Esta interpreta archivos docker-compose.yml
en entornos Podman. Ten en cuenta que algunas funciones (como depends_on
) tienen limitaciones, por lo que en configuraciones complejas se recomienda hacer pruebas previas.
Q4. ¿Podman funciona de manera estable en Ubuntu?
A4. Sí, funciona de forma estable en Ubuntu 20.04 LTS o superior. Está disponible en los repositorios oficiales y puede instalarse con apt
. Para versiones más recientes, se recomienda añadir un PPA.
Q5. ¿Existen limitaciones al usar el modo rootless?
A5. Sí, algunas operaciones privilegiadas, como asignar puertos menores a 1024, no están permitidas. No obstante, es posible usar reenvío de puertos (port forwarding) como solución. En la mayoría de casos, rootless es totalmente práctico.
Q6. ¿Podman puede descargar imágenes desde Docker Hub?
A6. Sí, por defecto accede a Docker Hub. En algunos casos es necesario especificar el namespace completo, por ejemplo:
podman pull docker.io/library/ubuntu
Además, Podman soporta otros registros como Quay.io o GitHub Container Registry.
Q7. ¿Podman es apto para producción?
A7. Sí, Podman cuenta con funciones de integración con systemd y compatibilidad con pods de Kubernetes, lo que lo hace adecuado para entornos de producción. De hecho, en RHEL y Fedora es la herramienta predeterminada, con casos de uso en gran escala.