Podman en Ubuntu: Guía Completa para Usar Dockerfile y Crear Contenedores Seguros

目次

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:

DockerPodman
docker build -t myapp .podman build -t myapp .
docker run -it myapppodman run -it myapp
docker imagespodman images
docker pspodman 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.

Enlaces de referencia