Introducción a Podman

La contenerización ha transformado la manera en que desplegamos y gestionamos aplicaciones, proporcionando una solución eficiente y portátil para el desarrollo y la implementación de software. Exploraremos Podman, una herramienta de para la gestión de contenedores que ha ganado popularidad en el ecosistema Linux por su enfoque innovador y su capacidad para ofrecer una experiencia de usuario eficiente y segura.


¿Qué es Podman?

Podman, acrónimoi de Pod Manager, es una herramienta de contenerización diseñada para la construcción, compartición, implementación y ejecución de aplicaciones utilizando contenedores en entornos de sistemas operativos basados en Linux. A diferencia de otras herramientas como Docker, Podman se destaca por ser un daemonless (sin daemon), lo que significa que no requiere un proceso en segundo plano para ejecutarse, ofreciendo así una experiencia más segura y fácil de usar. Esto no sólo simplifica la arquitectura, sino que también mejora la seguridad y la integración con otras herramientas del sistema.

¿Cómo funciona?

Podman opera en torno a la filosofía de un contenedor por proceso. Cada contenedor es tratado como un proceso independiente, lo que simplifica la gestión y permite una mayor flexibilidad. La compatibilidad con el estándar de Open Container Initiative (OCI) garantiza la portabilidad de las imágenes y la interoperabilidad con otras herramientas de contenerización.

Podman utiliza conceptos similares a Docker, como imágenes y contenedores, pero su enfoque sin daemon permite a los usuarios ejecutar contenedores como procesos independientes. Esto mejora la seguridad y simplifica la integración con sistemas de gestión de procesos y herramientas existentes en el ecosistema Linux.

Características clave

  • Interfaz de línea de comandos (CLI) similar a Docker: Ofrece una interfaz de línea de comandos familiar para aquellos que han utilizado el Docker Container Engine.
  • Compatibilidad con contenedores OCI: Al igual que otros motores de contenedores comunes como Docker, CRI-O y containerd, Podman se basa en la especificación de tiempo de ejecución de contenedores compatible con OCI (runc, crun, runv, etc.) para interactuar con el sistema operativo y crear los contenedores en ejecución.
  • Gestión de contenedores sin privilegios: Los contenedores bajo el control de Podman pueden ejecutarse tanto por el usuario root como por un usuario no privilegiado, brindando flexibilidad y seguridad en la ejecución de contenedores.
  • Ecosistema completo de contenedores: Gestiona el ecosistema completo de contenedores, incluyendo pods, contenedores, imágenes de contenedor y volúmenes de contenedor, utilizando la biblioteca libpod.
  • Soporte multiplataforma: Es compatible con clientes en Linux, Mac y Windows, permitiendo una experiencia consistente en diferentes sistemas operativos.

Funcionalidades adicionales

  • API RESTful para la gestión de contenedores: Ofrece una API RESTful para la gestión de contenedores, facilitando la automatización y la integración con otras herramientas.
  • Cliente remoto de Podman: Se dispone de un cliente remoto de Podman que puede interactuar con el servicio RESTful, brindando flexibilidad en la administración de contenedores desde diferentes ubicaciones.

Fortalezas de Podman

  • Sin Daemon: La ausencia de un daemon simplifica la instalación y reduce la complejidad del sistema. Cada contenedor se ejecuta como un proceso independiente, lo que mejora la seguridad eliminando un posible punto de vulnerabilidad.
  • Integración con herramientas de sistema: Se integra fácilmente con las herramientas y scripts de gestión de procesos y servicios existentes en sistemas Linux, lo que facilita su incorporación a entornos existentes, permitiendo una mayor flexibilidad y adaptación.
  • Compatibilidad con Docker: Es compatible con el formato de imágenes y contenedores de Docker. Esto significa que los usuarios pueden aprovechar el vasto ecosistema de Docker sin depender del daemon de Docker.
  • Soporte para Pods: Podman introduce el concepto de pods, que permite agrupar y gestionar múltiples contenedores como una unidad, compartiendo el mismo espacio de red y almacenamiento.

Debilidades de Podman

  • Menos herramientas de gestión: Aunque Podman se integra con herramientas de sistema existentes, la falta de algunas funciones de administración avanzadas puede ser una limitación en comparación con Docker.
  • Desempeño: En ciertos escenarios, Docker puede tener un rendimiento ligeramente mejor que Podman, especialmente en términos de inicio de contenedor.

Arquitectura de Podman

La arquitectura utilizada por Podman se basa en la filosofía de «un contenedor por proceso». Cada contenedor se ejecuta como un proceso independiente en el sistema host, sin la necesidad de un demonio central. Esto proporciona un mayor aislamiento y facilita la gestión de contenedores.


Instalar Podman

Aunque el entorno principal de ejecución de Podman solo es compatible con sistemas operativos Linux, otros sistemas pueden utilizar el cliente remoto para gestionar sus contenedores en un entorno Linux. Este cliente remoto es prácticamente idéntico al programa estándar de Podman.

El cliente remoto sigue un modelo cliente-servidor. Es necesario tener Podman instalado en una máquina o máquina virtual Linux que también tenga el daemon SSH en ejecución. En el sistema operativo local, al ejecutar un comando de Podman, este se conecta al servidor a través de SSH. Luego, se conecta al servicio de Podman utilizando el socket de systemd.

Cada máquina Podman en Mac utiliza una máquina virtual basada en QEMU, mientras que en Windows utiliza una distribución virtualizada de Windows System for Linux (WSLv2).

En la página oficial de Podman puedes obtener información de cómo instalar Podman: Podman Installation (Inglés)

Instalar Podman en Mac

Instalar Podman a través de Homebrew:

brew install podman

Una vez instalado, hay que crear e inicializar la máquina de Podman:

podman machine init
podman machine start

Verificar la instalación:

podman info

También existe una versión de Podman Desktop disponible

Instalar Podman en Windows

Para instalar el cliente Podman en Windows hay que comenzar descargando el instalador para Windows. El instalador para Windows está disponible para su descarga desde la página de releases de Podman. El archivo del instalador para Windows tiene el nombre podman-#.#.#-setup.exe, donde los símbolos # representan el número de versión de Podman.

Una vez que hayas descargado el instalador en tu sistema Windows, simplemente haz doble clic en el instalador y se instalará automáticamente. Se puede modificar la ruta en la que se quiere instalar.

Es importante ejecutar Podman en una ventana de comando utilizando las aplicaciones del Símbolo del Sistema de Windows (cmd.exe) o PowerShell (pwsh.exe).

Para verificar la instalación, ejecutar el siguiente comando:

podman info

Instalar Podman en Linux

Para instalar Podman en Linux, tendrá que tener en cuenta la versión de Linux que tenga.

Arch Linux y Manjaro Linux

sudo pacman -S podman

Consulta las instrucciones adicionales para el modo rootless si es necesario en la wiki de ArchLinux.

Alpine Linux

sudo apk add podman

Consulta la wiki de Alpine Linux para más detalles sobre Podman.

CentOS

Podman está disponible por defecto en los repositorios Extras (CentOS 7) y en el repositorio AppStream (CentOS 8).

sudo yum -y install podman

Debian

Podman está disponible a partir de la versión Debian 11 (Bullseye).

sudo apt-get -y install podman

Ubuntu

sudo apt-get update
sudo apt-get -y install podman

Para versiones más recientes, considera el repo Kubic.

Fedora

sudo dnf -y install podman

openSUSE

sudo zypper install podman

Raspberry Pi OS arm64 (beta)

Raspberry Pi OS utiliza repositorios estándar de Debian por lo que es compatible con los repositorios arm64 de Debian. Sigue los pasos de Debian para instalar Podman en Raspberry Pi OS.


Ejemplos de uso

A continuación veremos algunos ejemplos de cómo utilizar Podman en diferentes situaciones.

Despliegue de aplicaciones web

Podman es ideal para el despliegue de aplicaciones web, permitiendo a los desarrolladores crear entornos aislados y portátiles para el desarrollo y producción de sus aplicaciones.

Ejemplo de cómo desplegar un contenedor web:

podman run -d -p 8080:80 nginx

Este comando inicia un contenedor Nginx en segundo plano (-d), mapeando el puerto 80 del contenedor al puerto 8080 del host (-p 8080:80).

Gestión de microservicios

Podman facilita la gestión de microservicios al permitir la ejecución de múltiples contenedores de manera eficiente.

Supongamos que deseamos ejecutar un servicio backend en Python y un servicio de base de datos en PostgreSQL:

podman run -d --name backend python-app
podman run -d --name db -e POSTGRES_PASSWORD=mysecretpassword postgres:latest

Aquí, iniciamos contenedores independientes para el backend y la base de datos, proporcionando un entorno aislado y fácil de gestionar.

Desarrollo y pruebas

Los desarrolladores pueden aprovechar Podman para crear entornos de desarrollo y pruebas reproducibles, mejorando la consistencia en todo el ciclo de vida del software.

Supongamos que estamos desarrollando una aplicación en Node.js:

podman run -it --rm -v $(pwd):/app -w /app node:14 npm install

Este comando ejecuta un contenedor Node.js, montando el directorio actual dentro del contenedor y ejecutando el comando npm install. Una vez completado, el contenedor se elimina (--rm), asegurando un entorno limpio.

Integración con herramientas de orquestación

Podman se integra fácilmente con orquestadores como Kubernetes, facilitando la gestión de contenedores en entornos de escala empresarial.

El siguiente ejemplo muestra cómo se pueden utilizar archivos YAML de Kubernetes para gestionar pods y contenedores.

Supongamos que queremos ejecutar un pod con dos contenedores, uno para una aplicación frontend y otro para una base de datos:

Creamos un archivo pod.yaml con la configuración del pod:

# pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: frontend
    image: my-frontend-image:latest
  - name: database
    image: postgres:latest
    env:
      - name: POSTGRES_PASSWORD
        value: mysecretpassword

Y para ejecutar el pod, ejecutamos el siguiente comando:

podman play kube pod.yaml

Ejecución de contenedores de sistema

Podman también puede ejecutar contenedores de sistema completos, lo que resulta útil para probar o utilizar diferentes distribuciones Linux.

Por ejemplo, para ejecutar un contenedor de Ubuntu:

podman run -it --rm ubuntu:latest

Este comando inicia un contenedor interactivo de Ubuntu, permitiéndote explorar y realizar pruebas en un entorno Ubuntu aislado.


Referencias

  • Para aquellos nuevos en el mundo de los contenedores, se recomienda revisar la introducción a Podman (inglés).
  • Para instrucciones detalladas de instalación, puedes revisar la página oficial de instalación (inglés).
  • Usuarios avanzados y aquellos que provienen de Docker pueden encontrar tutoriales útiles (inglés) para sacar el máximo provecho de Podman.
  • Para detalles avanzados sobre la interfaz de línea de comandos de Podman, se puede consultar la página de comandos.
  • Desarrolladores interesados en interactuar con la API de Podman pueden encontrar documentación detallada en la referencia de la API.

Conclusiones

Podman ofrece una alternativa atractiva para la contenerización en entornos basados en Linux. Su enfoque sin daemon, integración con herramientas de sistema y compatibilidad con Docker lo convierten en una opción valiosa para desarrolladores y administradores de sistemas que buscan flexibilidad y seguridad en la gestión de contenedores.


Comentarios
Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.