Podman en Ubuntu: Construcción y ejecución de contenedores con Dockerfile (Guía práctica para principiantes)

目次

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.sh del host al contenedor
  • Establece hello.sh como 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.

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

年収訴求