Ir al contenido principal

¿Qué es Podman? ¿El sucesor de Docker?

Working with Podman

Qué es Podman?

Podman es un motor de contenedores (container engine) desarrollado por RedHat, y sí, si lo de motor de contenedores lo has asociado con Docker, vamos por buen camino.

Podman quiere ser la alternativa al archiconocido motor Docker para contenedores, pero nos preguntamos: ¿Qué nos ofrece RedHat con Podman? ¿Por qué deberíamos migrar a Podman? ¿Es Podman el sustituto de Docker o solo un competidor más? Es pronto para dar respuesta a todas a estas preguntas, pero en este artículo intentaremos describir cuáles son las bazas que tiene Podman para destronar al actual rey de los contenedores.

qué es podman 1

Facilidad de uso

Mientras me documentaba para escribir este artículo, me topé con una presentación del ingeniero de RedHat, Dan Walsh, en la que comenzaba diciendo cómo reemplazar Docker con Podman e indicaba cómo realizar esta migración en una serie de pasos.

El primero es ejecutar:

dnf install -y podman

Seguidamente ejecutar:

alias docker=podman

Y termina su presentación diciendo: “¿Alguna pregunta?”

Evidentemente es una broma, pero la idea es demostrar que la migración a Podman es muy sencilla, ya que los ingenieros de RedHat han prestado especial atención en usar la misma nomenclatura a la hora de ejecutar comandos de Podman. Por lo que, si eres un usuario de Docker, ya conoces la mayoría de los comandos en Podman. Así que, efectivamente, es tan sencillo como, en lugar de ejecutar docker run, ejecutar podman run, y el resultado será exactamente el mismo.

Dan también hace referencia a un hilo de Twitter para representar la facilidad de la migración, en el que otro ingeniero de RedHat ha utilizado su “método de migración” utilizando los dos comandos arriba descritos y, pasados un par de meses, lo había olvidado completamente, ya que continuó utilizando los mismos comandos que ha estado usando en Docker durante años.

qué es podman 2

No más demonios gordos (#nobigfatdaemons)

Es una referencia al servicio (daemon en inglés) de Docker. Como sabemos, Docker es una herramienta maravillosa, con infinidad de ventajas y opciones. Es capaz de manejar todo lo referente a nuestros contenedores: red, almacenamiento, ejecución, motorización, etc., y todo esto lo gestiona el mismo servicio de Docker, lo cual puede traer algunas desventajas, ya que mientras más contenedores usemos, más grande y complejo se hace el servicio de Docker.

qué es podman 3

Es por esto que RedHat ha decidido desarrollar su herramienta sin depender de un servicio, y esta es la principal diferencia entre Docker y Podman.

Podman no necesita un gran servicio (daemon) para funcionar; han descentralizado todos los componentes necesarios para la gestión de contenedores y los han individualizado en componentes más pequeños que se utilizarán solo cuando sean necesarios. Esta descentralización nos ofrece un gran número de ventajas que veremos más adelante.

Podman: ¿Pods o Contenedores?

Podman tiene un nombre muy descriptivo, y sí, cuando hablamos de Pods nos referimos a esas mismas unidades que usamos en el mundo de Kubernetes.

Podman es capaz de ejecutar contenedores exactamente de la misma forma en que lo hace Docker, pero también es capaz de ejecutar Pods.

Para los que no estén familiarizados con el mundo de Kubernetes pronto tendremos un artículo hablando de ello en más profundidad, pero antes podemos aclarar que un Pod es la unidad de medida mínima en Kubernetes. La diferencia fundamental es que un Pod puede contener más de un contenedor. Sobre todo se hace uso de un contenedor principal acompañado de uno o más “side cars containers” corriendo en el mismo Pod que el contenedor principal, para “ayudarlo” con la tarea principal para la que fue diseñado.

Si os suena a magia negra, por ahora quedaos con que un Pod es una unidad en la que puede haber uno o más contenedores; ya profundizaremos más en estos conceptos.

Imaginaos que cada una de las focas del logo de Podman es un contenedor; entonces lo que tenemos es un Pod.

qué es podman 4

Gestión de imágenes

Podman usa una herramienta basada en scopio para la inspección y gestión de imágenes de tipo OCI.

Con Podman podemos inspeccionar imágenes OCI sin necesidad de descargarlas, y aún mejor, podemos tomar elementos de un repositorio y moverlo a otro directamente sin que esta imagen pase por nuestro dispositivo; no tendríamos que descargar la imagen para poder inspeccionar o usar sus componentes.

Aunque Podman es capaz de construir imágenes de forma muy similar a Docker con el comando Podman build, el equipo de Redhat también nos ofrece otra herramienta llamada buildah.

qué es podman 5

Buildah es una herramienta para gestión de imágenes que está muy ligada al uso de Podman. Entre sus características nos permite manipular una imagen o un contenedor corriendo para crear nuevas imágenes, montar el directorio raíz de un contenedor para su manipulación o crear nuevas imágenes en formato tradicional o OCI. Si quieres saber un poco más sobre Buildah aquí te dejo el enlace a su repositorio oficial.

Podman es rootless (seguridad en Podman)

Gracias a la arquitectura modular de Podman, no es necesario correr nuestros contenedores como root. Esto es una gran ventaja, ya que podemos ejecutar nuestros contenedores con diferentes usuarios que tengan diferentes privilegios y sin riesgo de que alguien tenga acceso al servicio de contenedores y pueda ejecutar contenedores como usuario root, y haga estragos en nuestros servidores.

Lo que Podman hace cuando se ejecuta como un usuario non-root es crear un directorio en el directorio home del usuario y almacenar allí toda la información de las imágenes y contenedores que tiene este usuario. Por lo que, si por ejemplo hacemos un podman images con nuestro usuario non-root, mostrará solo las imágenes que este usuario ha creado o descargado.

Otra ventaja de Podman es que es capaz de usar separación de UIDs utilizando namespaces, lo cual nos da una capa extra de aislamiento a la hora de correr nuestros contenedores.

En cuanto a seguridad, la infiltración en el servicio de Docker es incluso más peligrosa que obtener privilegios root (sudo).

Cuando obtenemos permisos de administración (sudo) y hacemos algo en el sistema, siempre se registra en el log de auditoría del sistema, siempre deja rastros que seguir. Pero si accedemos al servicio de Docker y lo hacemos desde un contenedor que obtenga privilegios y nos deshacemos de este contenedor, es prácticamente imposible saber lo que hemos hecho; no se guarda en ningún log ni queda ningún registro de nuestros actos. Lo cual presenta a Podman como una herramienta más segura.

Integración con Systemd

Podman nos permite correr contenedores que tengan habilitado Systemd por defecto, sin ninguna modificación.

Soporta activación de socket, por lo que podemos utilizar systemd para configurar un socket y tener acceso a una API remota a través de la cual comunicarnos con Podman. Se han desarrollado una serie de librerías Python para poder implementar integraciones y comunicarnos con la API remota de Podman.

De hecho, ya hay una aplicación llamada Pypodman desarrollada en Python, que es capaz de ejecutar todo lo que ejecuta Podman localmente, pero de forma remota, comunicándose con la API remota, lo cual abre un mundo de posibilidades.

Conclusiones

No hay una conclusión clara sobre si Podman es un reemplazo a Docker o si conseguirá destronar al rey de los contenedores.

Docker tiene ventajas contra Podman; en primer lugar la distribución y aceptación que tiene, o herramientas como Docker swarm, docker-compose, etc. Ahora mismo, si queremos orquestar contenedores en Podman, nuestra alternativa es usar Kubernetes o, como preferiría RedHat, usar Openshift usando cri-o que es el runtime que utiliza Podman.

Lo que sí sabemos es que RedHat está apostando con fuerza en el mundo de los contenedores, desde la adquisición de CoreOS para su uso en la plataforma Openshift, hasta el desarrollo de Podman, que actualmente es el motor de contenedores por defecto en RedHat 8 y CentOS 8.

Y tú qué crees: ¿Es Podman el sustituto de Docker? ¿Son suficientes las ventajas que nos ofrece? ¿Crees que podrá ocupar el trono?

Si te interesa el mundo de los contenedores o de la tecnología en general, mantente atento a próximas entradas; estaremos hablando y haciendo tutoriales para aprender sobre docker-compose, Swarm, Kubernetes, Openshift y mucho más.

¿Tienes alguna sugerencia? ¿Qué temas te interesan? ¿De qué crees que deberíamos hablar en blog? Expresa tu opinión en la caja de comentarios; queremos conocerla.

Comentarios

Entradas más populares de este blog

Selfies en 3D llegan a Venezuela y hasta las podrás imprimir en plástico

La empresa 3DUP lanzó al mercado venezolano las líneas de impresoras 3D,  Cube3  y CubePro  de 3D Systems Corporation, a través de las cuales se podrán imprimir modelos, diseños o escaneos en 3D. De igual manera, también está disponible el servicio de selfie3D y el servicio de modelado 3D. La impresora Cube3 tiene dos cabezales de impresión y es única en su clase, posee una amplia combinación de materiales ABS, PLA y una variedad de 18 colores. Es el equipo más fácil de utilizar en el mercado y tiene un software de construcción apto para Windows y Mac; además cuenta con conexión wifi. La nueva CubePro, impresora 3D de calidad profesional ofrece el mayor volumen de impresión entre las impresoras de su clase, sus versiones cuentan con uno, dos o tres cabezales de impresión. Además, posee una amplia combinación de materiales ABS, PLA y Nylon con una variedad de 25 colores, cuenta con una cámara calefaccionada y cerrada para optimizar los trabajos de impresión 3D. P...

Solución al problema “sudo: command not found” en Linux

Al instalar una distribución GNU/Linux, lo primero que se suele hacer es ejecutar los siguientes comandos de actualización del sistema: Terminal 1 2 sudo apt - get update sudo apt - get upgrade Sin embargo, en Debian nos encontraremos con el problema de que el comando sudo  no se encuentra. Esto depende de cómo hayamos realizado el proceso de instalación, ya que si se especifica una contraseña para el usuario  root  durante la instalación,  sudo  no será instalado por defecto. Por el contrario, si no se especifica una contraseña, sí se instalará. En caso de obtener el error  “sudo: command not found” , debemos realizar los siguientes pasos para solucionar esta situación. 1. Cambiar al usuario root Desde la terminal, introducimos el comando  su  para hacer el login con el usuario  root . Pedirá una contraseña, que será la que hayamos especificado en el proceso de instalación...

CÓMO RECUPERAR UN ARCHIVO DE VÍDEO EN LINUX

Paso 1:   Com probam os  que existe información en el archivo Parece lógico, pero por si acaso, lo incluyo como primer paso. Como veis, en mi caso el archivo ocupa 271,1MB (lo que significa que  la información está ahí, pero no podemos verla porque se ha guardado de forma incorrecta ). A continuación,  instalamos  Untrunc . Os indico  cómo hacerlo en los próximos pasos , es muy sencillo. Las instrucciones detalladas se encuentran en el  Readme  del  repositorio de Ponchio . Leedlas si usáis otro SO que no sea Ubuntu. Paso 2: Instalamos una serie de librerías  Libav  con el comando: Terminal Shell 1 sudo apt - get install libavformat - dev libavcodec - dev libavutil - dev Si usas otro SO que no sea Ubuntu (o una versión antigua de este), quizás debas instalar manualmente Libav. Paso 3: Descargamos el código fuente de  Untrunc , desde Github: Terminal ...