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 contenerizaci贸n 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).

Instalar Podman en Mac

Instalar Podman a trav茅s de Homebrew:

brew install podman

Verificar la instalaci贸n:

podman info

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.