Podman es una estrella en ascenso en un nuevo panorama de contenedores que de repente tiene muchos más jugadores. Aprenda qué es Podman y cómo se compara con Docker para la compatibilidad con Kubernetes y más.

por Jacqueline Primavera

Podman es un motor de contenedores : una herramienta para desarrollar, administrar y ejecutar contenedores e imágenes de contenedores. Los contenedores son paquetes de software autónomos y estandarizados que contienen todos los elementos necesarios para ejecutarse en cualquier lugar sin necesidad de personalización, incluido el código de la aplicación y las bibliotecas de soporte. Las aplicaciones basadas en contenedores han revolucionado el desarrollo de software durante la última década , haciendo que los sistemas distribuidos y basados ​​en la nube sean fáciles de implementar y mantener.

Podman es un proyecto de Red Hat que es de código abierto y de descarga gratuita . Es un recién llegado a la escena de la contenedorización, con la versión 1.0 lanzada en 2019 . Desde entonces, Podman ha hecho grandes avances, y su ascenso se ha visto agravado por el declive gradual de Docker , el proyecto que en muchos sentidos creó el mundo de los contenedores tal como lo conocemos hoy.

Podman y Kubernetes

Si está un poco familiarizado con el desarrollo basado en contenedores, conocerá el nombre Kubernetes. A medida que las aplicaciones en contenedores se volvieron más complejas, los desarrolladores necesitaron herramientas que pudieran coordinar los contenedores que interactuaban entre sí mientras se ejecutaban en diferentes máquinas virtuales, o incluso en diferentes máquinas físicas. Esta herramienta se denomina plataforma de orquestación de contenedores y Kubernetes es, con diferencia, el ejemplo más destacado. Kubernetes puede funcionar con cualquier contenedor que cumpla con la especificación de imagen de Open Container Initiative (OCI), lo que hacen los contenedores de Podman.

Una de las características importantes de Kubernetes es el concepto de pod , una agrupación efímera de uno o más contenedores que es la unidad informática más pequeña que puede administrar Kubernetes. Podman también se centra en la idea de una cápsula, como su nombre lo indica. Un pod de Podman también incluye uno o más contenedores, que se agrupan en un solo espacio de nombres, red y contexto de seguridad. Esta similitud hace que Podman y Kubernetes encajen de forma natural y, desde el principio, uno de los objetivos de Red Hat era que los usuarios de Podman organizaran contenedores con Kubernetes.

Podman contra Docker

El otro gran nombre del mundo de los contenedores que seguramente habrá escuchado es Docker. Docker no fue el primer motor de contenedores, pero en muchos sentidos ha llegado a definir la creación de contenedores. Gran parte del funcionamiento de Docker es el estándar de facto para el desarrollo basado en contenedores, lo suficiente como para que muchas personas utilicen “Docker” como abreviatura de contenedores.

Si bien Docker y Podman ocupan un espacio similar en el ecosistema de contenedores, no son lo mismo y tienen diferentes filosofías y enfoques sobre cómo funcionan. Por ejemplo, Docker es una plataforma todo en uno con herramientas para tareas específicas, mientras que Podman colabora con otros proyectos para ciertos fines; por ejemplo, se basa en Buildah para crear imágenes de contenedores.

También hay diferencias arquitectónicas: Docker no tiene un concepto nativo de pods, por ejemplo. Otra diferencia importante es que Docker se basa en un programa daemon en segundo plano que se ejecuta continuamente para crear imágenes y ejecutar contenedores, mientras que Podman lanza contenedores y pods como procesos secundarios independientes. Este aspecto del diseño de Docker tiene implicaciones importantes para la seguridad, que analizaremos en breve.

Comandos de Docker en Podman

Por diseño y necesidad, Podman y Docker son compatibles en general. Parte de esa compatibilidad se puede atribuir a la adhesión a estándares abiertos. Debido a que ambos motores funcionan con contenedores que cumplen con el estándar OCI, puede crear un contenedor con Docker y modificarlo en Podman, o viceversa, y luego implementar cualquiera de los contenedores en Kubernetes.

Cuando se lanzó Podman en 2019, Docker era tan dominante que su interfaz de línea de comandos se había convertido en parte de las rutinas de programación y la memoria muscular de muchos desarrolladores. Para hacer que un cambio potencial a Podman sea más fluido, los creadores de Podman se aseguraron de que sus comandos y sintaxis reflejaran la de Docker tanto como fuera posible. Fueron tan lejos como para hacer posible establecer un alias que redirija los comandos de Docker a Podman .

Mejor seguridad con contenedores sin raíz

Con Podman y Docker trabajando de manera tan similar en tantas formas, ¿por qué elegiría uno sobre el otro? Bueno, una razón importante es la seguridad. ¿Recuerda cómo Docker se basa en un daemon para realizar gran parte de su trabajo continuo? Ese demonio se ejecuta como root, lo que lo convierte en un punto de entrada potencial para los atacantes. Este no es un obstáculo insuperable para la informática segura, pero sí significa que debe pensar un poco en navegar por los problemas de seguridad de Docker .

En algunas situaciones, querrá ejecutar un contenedor con privilegios de root en su máquina host, y Podman le permite hacerlo. Pero si prefiere mantener sus contenedores restringidos de forma segura al espacio del usuario, también puede hacerlo ejecutando lo que se denomina un contenedor sin raíz . Un contenedor sin raíz no tiene más privilegios que el usuario que lo lanzó; dentro del contenedor, ese usuario tiene privilegios de root. También puede usar marcas de línea de comandos para agregar privilegios a sus contenedores de forma granular.

¿Qué pasa con el rendimiento?

Un área en la que Docker tiene una ventaja sobre Podman es el rendimiento, al menos según algunos. Si bien hay poca información concreta sobre este tema, no es difícil encontrar desarrolladores frustrados en Hacker News , Stack Overflow y Reddit quejándose del rendimiento de Podman, especialmente cuando se ejecuta sin root. Algunos estudiantes universitarios suecos ejecutaron una suite de referencia en varias plataformas de contenedores diferentes y encontraron que Podman carecía de , aunque se admitía que esta era una versión anterior a 1.0 de Podman. Si bien no hay mucha información técnica sobre este tema, anecdóticamente, Podman se ve criticado por su desempeño.

¿Podman reemplazará a Docker?

De la discusión hasta ahora, puede que no parezca que se está trabajando en un gran cambio de ambiente para reemplazar Docker con Podman. Pero se avecina un cambio importante que desplazará a Docker de uno de sus nichos de toda la vida: el propio Kubernetes.

Kubernetes y Docker han sido durante años los gigantes gemelos del mundo de los contenedores. Pero su convivencia siempre fue algo incómoda. El auge de Kubernetes se produjo después de que Docker estuviera bien establecido en su nicho; de hecho, se podría decir que Kubernetes se hizo popular en parte porque Docker no estaba a la altura de la tarea de administrar todos los contenedores que debían coordinarse en una gran aplicación distribuida. .

Docker (la compañía) desarrolló su propia plataforma de orquestación de contenedores en 2015, denominada Swarm, que fue diseñada para aprovechar las fortalezas de Docker. Swarm se lanzó con bombos y platillos , pero nunca alcanzó a Kubernetes . Si bien Swarm todavía tiene devotos, Kubernetes se ha convertido en el estándar de facto para la orquestación de contenedores, al igual que Docker se convirtió en el estándar de facto para otros aspectos del ecosistema de contenedores.

Además, Docker nunca jugó bien con Kubernetes en términos de su tiempo de ejecución de contenedor , el componente de bajo nivel del motor de contenedor que, entre otras tareas, funciona con el kernel del sistema operativo (SO) subyacente y monta imágenes de contenedor individuales. Tanto Docker como Kubernetes se ajustan a la especificación de imagen OCI, que Kubernetes usa para coordinar imágenes creadas en contenedores. Pero Kubernetes también se basa en tiempos de ejecución de contenedores compatibles con una API de complemento estandarizada llamada Interfaz de tiempo de ejecución de contenedores (CRI), que Docker nunca ha llegado a implementar.

Durante mucho tiempo, la popularidad de Docker obligó a Kubernetes a usar Dockershim , una capa compatible con CRI que era un intermediario entre Kubernetes y el demonio de Docker. Sin embargo, esto siempre fue una especie de truco y, a principios de este año, Kubernetes desechó el soporte para Dockershim . (Podman, por el contrario, utiliza el tiempo de ejecución CRI-O compatible de Cloud Native Computing Foundation).

Esto es parte de una historia más amplia sobre los intentos y fracasos de Docker por convertirse en una empresa empresarial . En resumen, Docker nunca pudo separarse por completo de Kubernetes. Mientras tanto, Kubernetes ya no necesita Docker en la medida en que lo hacía antes.

No está claro si Podman reemplazará a Docker, pero definitivamente será uno de los contendientes. Ayuda que Podman no sea un producto insignia que busca ser monetizado, sino más bien una única oferta de tecnología de código abierto de una empresa mucho más grande. Podemos esperar que Podman y Kubernetes permanezcan entrelazados durante algún tiempo.

¿Qué motor de contenedor debería usar?

Con suerte, esta discusión le dará una idea de los factores que lo ayudarán a elegir entre estos dos motores de contenedores. Podman se basa en una arquitectura más segura, mientras que Docker tiene una historia más profunda. Podman es nativo de Kubernetes, mientras que Docker también funciona con Docker Swarm. Docker incluye toda la funcionalidad que necesita para muchas tareas relacionadas con contenedores. Podman es modular y te permite experimentar con diferentes herramientas para diferentes propósitos.

Dicho esto, la pregunta “Podman vs. Docker” es, en cierto modo, una elección falsa. Ambas plataformas crean imágenes que se ajustan a las especificaciones de OCI, y ambas funcionan con muchos de los mismos comandos, por lo que puede moverse sin problemas entre las dos. Por ejemplo, puede querer usar Docker para el desarrollo local y luego usar Podman para implementar los contenedores que creó dentro de Kubernetes .

Una característica que distingue a Docker es que viene con soporte pago. Pero incluso esto tiene un lado negativo: como Docker (la empresa) intenta monetizar su oferta principal, ha comenzado a cobrar por el entorno de desarrollo de Docker Desktop. Red Hat, por otro lado, parece contento con dejar libre a Podman (como en la cerveza) por ahora.

Jacqueline Primavera es escritora técnica y editora en Los Ángeles.

Fuente: https://www.infoworld.com/article/3663672/what-is-podman-and-will-it-replace-docker.html

Deja una respuesta