¿Qué es Podman y para qué sirve?
Dentro del mundo de los contenedores Docker se presenta como la alternativa más extendida con diferencia. Sin embargo, la idea central que hay detrás de esta tecnología está siendo adoptada por soluciones modernas que aportan nuevas características y ventajas. Es el caso de Podman, del cual os vamos a explicar en esta completa guía.
- ¿Qué es Podman?
- Diferencias entre Docker y Podman
- Características principales de Podman
- Ventajas de usar Podman frente a otras herramientas
- Casos de uso de Podman
- Requisitos previos para instalar Podman
- Cómo instalar Podman
- Instalación en macOS
- Comandos básicos de Podman
- Integración de Podman con otras herramientas
- Buenas prácticas al trabajar con Podman
- Uso de contenedores rootless para mayor seguridad
¿Qué es Podman?
Podman es una herramienta para la creación y gestión de contenedores y pods (inspirados en los conocidos pods de Kubernetes). Es una alternativa moderna a Docker que nos ofrece algunas ventajas importantes, a la vez que consigue ser más ligera, ya que no tiene la necesidad de correr con un demonio en segundo plano. Con todo, mejora tanto la experiencia de desarrollo como los despliegues.
La herramienta está mantenida por Red hat y se ofrece bajo licencia Apache, con lo que todos sus componentes se pueden utilizar a nivel comercial perfectamente. Corre de manera nativa en Linux, pero también se puede usar en otros sistemas operativos como Windows y macOS.
Diferencias entre Docker y Podman
Ya hemos dicho que Podman se postula como una alternativa al conocido sistema de contenedores Docker, pero ¿qué ofrece de diferente?
Se trata de una herramienta de código abierto para la creación, gestión y ejecución de contenedores en sistemas Linux, igual que Docker. Sin embargo, así como hay ciertos componentes de Docker que tienen licencia comercial, no ocurre igualmente con Podman, donde todos sus componentes son completamente abiertos a uso comercial.
Aparte de las licencias, existen otros juntos destacables que podemos mencionar.
Primero está el tema del demonio, que el Docker funciona de manera centralizada y que hace las tareas de control de contenedores. Sin embargo, Podman no necesita tener un demonio corriendo en segundo plano de manera permanente, por lo que puede consumir menos recursos cuando está abierto.
También es destacable el hecho de que Podman permite ejecutar contenedores sin privilegios de administrador, mientras que Docker tradicionalmente requiere permisos de root para funcionar.
Otro punto interesante es que Podman ya viene con soporte nativo para los pods, un concepto inspirado en Kubernetes.
Características principales de Podman
Vamos a ver con mayor detalle algunas características importantes de esta tecnología.
Arquitectura sin demonio (daemonless)
Como hemos dicho, Podman no necesita un demonio que controle los contenedores. Esto puede reducir el uso de recursos del sistema, haciendo que la herramienta sea más ligera que otras alternativas que sí requieren demonios como Docker.
Que use un sistema sin demonios implica que se ejecutará como un proceso hijo, lo que facilita la supervisión e incluso reduce riesgos de seguridad de los contenedores.
Compatibilidad con comandos de Docker
Una cosa muy interesante es que Podman tiene la misma interfaz de línea de comandos que ya conocemos en Docker. Por lo tanto, resulta bastante sencilla y natural la migración de una herramienta hacia la otra, ya que muchas veces podemos ejecutar los mismos procesos que ya tenemos el Docker sin cambios en los scripts.
Soporte para contenedores rootless
En Podman tenemos la posibilidad de ejecutar contenedores sin permisos de administrador, algo que técnicamente se denomina contenedores rootless.
Esta es una innovación muy interesante en Podman, porque hace que los sistemas posean, al menos sobre el papel, mayor seguridad que en Docker, ya que no tienen privilegios de administrador en la máquina host.
Gestión de pods y contenedores
El nombre de la herramienta, Podman, viene de su característica de introducción del concepto de pods. Se trata básicamente de una idea traída directamente de Kubernetes y consiste en la posibilidad de crear grupos de contenedores que comparten red, almacenamiento y un mismo espacio de nombres.
Este detalle implica que, sí necesitas realizar despliegues reales gracias a Podman puedes trabajar sin la necesidad de un orquestador como Kubernetes. Igualmente, no requiere de un docker-compose para poder gestionar en conjunto varios contenedores.
Integración con Kubernetes
Como hemos dicho, gracias al concepto de pod nativo, en principio no necesitas Kubernetes. No obstante, el modo de trabajo es muy similar a como vienes realizando con herramientas como Kubernetes, por lo que migrar de una a otra resultará bastante sencillo.
Puedes por tanto sin ningún problema comenzar con Podman, tanto en la etapa de desarrollo como al llevar a producción una aplicación, y migrar a Kubernetes si opinas que es necesario para ti.
De manera adicional, Podman puede generar directamente manifiestos YAML de Kubernetes a partir de contenedores y pods existentes. Este detalle hace que sea muy fácil el tránsito de una tecnología hacia la otra.
Ventajas de usar Podman frente a otras herramientas
Al ser Podman una tecnología más moderna ha conseguido aportar algunas ventajas que vamos a resumir en los próximos puntos.
Mayor seguridad gracias a contenedores rootless
Primero hay que destacar la posibilidad de ejecutar contenedores sin privilegios de root. Esto hace que la opción sea bastante más segura, especialmente en servidores donde existan varios usuarios.
Menor consumo de recursos
El hecho de no tener que trabajar con un demonio en segundo plano hace que Podman sea una alternativa más ligera y con un menor consumo de recursos de las máquinas donde se ejecuta.
Flexibilidad en entornos de desarrollo y producción
Puedes utilizar Podman tanto en entornos de desarrollo como producción. De hecho las configuraciones que tengas en desarrollo te funcionarán en producción sin necesidad de grandes ajustes.
Uso idéntico al CLI de Docker
Otra cosa que ya hemos comentado es que los comandos de Podman man y Docker son prácticamente los mismos, por lo que la curva de aprendizaje de Podman si ya conoces Docker es muy sencilla.
Integración nativa con sistemas Linux
La integración dentro de los sistemas operativos Linux es nativa, lo que permite gestionar los contenedores como servicios a través de herramientas como systemd.
Casos de uso de Podman
Puedes usar Podman allá donde los contenedores tengan sentido para ti, lo que incluye distintos contextos tanto como herramienta de desarrollo o de despliegues seguros.
Entornos de desarrollo y pruebas
Podman es ideal para los desarrolladores, ya que su funcionamiento es sencillo. De hecho, si ya trabajas con Docker podrás usar Podman de manera prácticamente inmediata. Pero también es destacable porque requiere menos recursos de las máquinas de trabajo, lo que permite una mejor experiencia de desarrollo.
Implementación en servidores de producción
Como hemos dicho, también es excelente para servidores en producción. Incluso, gracias a que su arquitectura no incluye un demonio funcionando en segundo plano, puedes conseguir que tus servidores aprovechen mejor los recursos con los que cuentan. Paralelamente, los contenedores rootless aportan mayor seguridad, por lo que encontraremos varias ventajas destacables.
Migración desde Docker a Podman
Otra de las ventajas de esta tecnología es que se ha construido de modo que la inmigración desde Docker hacia Podman sea muy sencilla, ya sea por el uso de comandos prácticamente idénticos. También es ideal por el hecho de no necesitar, en principio, de otras herramientas de orquestación como Kubernetes.
Administración de contenedores en entornos empresariales
En entornos empresariales también le puede sacar mucho partido a Podman gracias a su mejor rendimiento y seguridad.
Requisitos previos para instalar Podman
Si quieres utilizar Podman tienes que empezar por verificar los siguientes requisitos técnicos, entendiendo que Podman está pensado para funcionar en Linux de manera nativa, por lo que tendrás que disponer de algunas herramientas en sistemas operativos como Windows.
Sistemas operativos compatibles (Linux, macOS, Windows WSL2)
Aunque sea una herramienta nativa de Linux también funciona en otros sistemas operativos como macOS o Windows, con detalles que vamos especificar en seguida.
Dependencias necesarias
Podrás instalar Podman en la mayoría de los sistemas operativos, siempre que tengas una versión moderna, ya que las herramientas necesarias están disponibles actualmente.
Solo en Windows debes haber instalado WSL2 antes de proceder, como explicaremos en el momento de abordar la instalación. De manera adicional, necesitarás una conexión a Internet para descargar las imágenes de los contenedores desde los repositorios.
Permisos y configuraciones iniciales
En principio no necesitas permisos de root para poder trabajar, por lo que generalmente no podrás usar Podman con los permisos que dispongas.
Las únicas dependencias en macOS pueden ser Homebrew si utilizas ese gestor de paquetes para instalarlo o en Windows disponer de WSL2, para tener compatibilidad con el subsistema de Linux.
Cómo instalar Podman
Vamos a ver ahora cómo instalar esta herramienta en los distintos sistemas operativos.
Instalación en Linux (Ubuntu, Debian, Fedora, etc.)
La instalación en Linux es prácticamente inmediata. Para trabajar con Podman en los sistemas operativos Linux, sea cual sea tu distro, lo más recomendable es utilizar los repositorios oficiales de la distribución que estés utilizando.
Por ejemplo, si estás en Ubuntu o cualquier otra distribución basada en Debian tendrás que utilizar los siguientes comandos.
sudo apt update sudo apt install -y podman
Instalación en macOS
Debido a que macOS es un sistema «unix like» como Linux, la integración es también muy directa.
Lo más cómodo para trabajar en macOS es instalar Podman con Homebrew.
brew install podman
De todos modos, también puedes usar si lo prefieres Podman Desktop, qué es un programa con interfaz gráfica que facilita la gestión de contenedores a golpe de clic. Esta herramienta instala Podman en el ordenador también.
Instalación en Windows con WSL2
Para utilizar Windows es un poco más complicado, pero si usas Docker ya no tendrás ningún problema. Solo necesitas contar con la herramienta WSL2. Luego tendrás que instalar una distribución de Linux con WSL2, como por ejemplo Ubuntu.
Será dentro de tu sistema Linux donde puedas poner en marcha Podman, utilizando los comandos de instalación de software de los repositorios oficiales de la distribución que hayas instalado.
Al igual que ocurría en macOS, también es posible utilizar Podman Desktop, aunque aún así seguirás requiriendo soporte para WSL2.
Verificación de la instalación y versión de Podman
Después de completar los pasos de instalación podrás verificar si Podman se encuentra correctamente configurado en tu sistema con el comando que puedes ver a continuación
podman --version
Comandos básicos de Podman
Ahora vamos a repasar los comandos básicos para utilizar Podman, creando y gestionando contenedores desde el terminal. Como verás, es muy similar a lo que puedes conocer de Docker.
Cada uno de los comandos de Podman se ejecutan en el terminal comenzando por «podman» y luego la acción o suncomando que queramos realizar. Veamos las acciones más importantes.
Descargar y ejecutar contenedores
Para traernos un contenedor del repositorio y descargarlo en nuestro ordenador local usamos el comando pull.
podman pull alpine
Una vez descargada la imagen del contenedor podemos arrancarla con el comando run.
podman run alpine
El comando anterior buscará la imagen llamada «alpine» y si no la encuentra la descargará, por lo que en principio nos podríamos haber saltado el paso anterior del «pull».
Además, el comando lo podemos personalizar todavía un poco más para conseguir que, en el mismo paso, se abra una sesión de shell con el contenedor, de la siguiente manera:
podman run -it alpine sh
Listar y gestionar contenedores
Para listar y gestionar contenedores utilizamos los mismos comandos que ya conocemos de Docker.
Para ver los contenedores que tenemos en ejecución:
podman ps
En ese listado podremos encontrar dos identificadores de los contenedores, que nos servirán para luego poder realizar acciones de gestión refiriéndonos a ellos.
Ahora, si queremos parar un contenedor en concreto:
podman stop id_contenedor
Si queremos eliminar alguno de los contenedores:
podman rm id_cintenedor
Construir imágenes desde Dockerfiles
También podemos construir nuestras propias imágenes a partir de Dockerfiles. Cómo puedes ver es exactamente igual que hacemos en Docker.
podman build -t mi_imagen .
Administrar pods y redes en Podman
Ahora vamos a ver cómo podemos administrar pods, comenzando por ver cómo podemos crear un pod.
podman pod create --name mi_pod
Una vez que lo tenemos creado lo podemos poner en funcionamiento, indicando la imagen base que queremos crear en el contenedor.
podman run -dt --pod mi_pod nginx
En el caso anterior la imagen base es «nginx». Además estamos usando -dt para activar dos flag que nos permiten ejecutar el contenedor en segundo plano, sin que se bloquee el terminal y conseguir que el contenedor se mantenga activo aunque no haya interacción directa.
Para gestión de redes el trabajo es idéntico al que realizamos en Docker. Por ejemplo comenzamos listando las redes que existen en el sistema con el comando:
podman network ls
También podemos crear redes con de esta manera:
podman network create mi_red
Adicionalmente, podemos conectar un contenedor a una red específica con la opción –network en el momento de arrancarlo.
podman run -d --network mi_red nginx
Integración de Podman con otras herramientas
Como ya hemos comentado, Podman tiene la capacidad de integrarse con algunas herramientas adicionales.
Podman Desktop
De manera oficial podemos utilizar el programa Podman Desktop que es una aplicación con interfaz gráfica que facilita la administración de contenedores, imágenes y pods. Está disponible como software multiplataforma en Linux, macOS y Windows. Compatibilidad con Kubernetes (podman kube).
Como hemos dicho antes, con Podman en principio no necesitamos usar Kubernetes. Sin embargo, si fuera necesario, desde el mismo Podman podemos generar archivos YAML de configuración de orquestación con esta herramienta de Google.
podman generate kube mi_pod > mi_pod.yaml
Además, es posible desplegar recursos directamente desde un manifiesto de Kubernetes:
podman kube play mi_pod.yaml
Uso con herramientas de CI/CD
Podman puede integrarse con pipelines dentro de las herramientas más comunes, ya que no solo lo tienes disponible en GitHub Actions sino también en otras como GitLab CI o Jenkins, por poner un par de ejemplos.
Gracias a ello, es posible construir y desplegar imágenes sin necesidad de Docker y realizar los procesos de integración continua y despliegue continuo.
Buenas prácticas al trabajar con Podman
Ya para acabar, vamos a destacar algunas de las prácticas más recomendables que debemos tener en cuenta a la hora de trabajar con Podman.
Uso de contenedores rootless para mayor seguridad
Podman permite trabajar con contenedores rootless, es decir, que no requieren privilegios de root. Usar este tipo de contenedores es muy recomendable, siempre que sea posible, ya que al ejecutarlos con usuarios sin privilegios estamos reduciendo los riesgos de seguridad en el sistema.
Automatización con scripts y alias
Debido a la compatibilidad entre Docker y Podman, con los mismos scripts y prácticamente sin tocar nada, podemos trabajar con Docker o Podman indistintamente.
Un truquito que puedes utilizar si quieres intercambiar Podman por Docker es crear un alias en la configuración de tu terminal.
alias docker=podman
De este modo cada vez que aparezca el comando «docker» se sustituirá automáticamente por el comando «podman», lo que facilita la transición desde Docker y automatizar tareas con scripts que ya tienes escritos anteriormente.
Gestión eficiente de imágenes
Para ahorrar espacio en tu sistema host es importante que elimines imágenes y contenedores no usados. Lo puedes conseguir con los comandos siguientes:
podman image prune podman container prune