Podman vs Docker: ¿Cuál elegir?

Si está interesado en el mundo de la virtualización y la creación de contenedores, es probable que se haya encontrado con Podman y Docker y es posible que se pregunte en qué se diferencian entre sí.

En esta publicación, exploraremos las diferencias entre Docker y Podman e intentaremos encontrar cuál será la mejor opción para usted.

Estibador

Docker es una tecnología de contenedorización que facilita la gestión de dependencias dentro de un proyecto en todos los niveles (desarrollo e implementación).

Disponible en Linux, Windows y Mac OS, el mecanismo de Docker se centra en los contenedores y su orquestación, y aquí es donde la contenedorización difiere de la virtualización.

Docker tiene dos bloques de construcción principales: Docker CLI y Docker Daemon.

Demonio acoplable:

Es un proceso en segundo plano constante que ayuda a administrar las imágenes, los contenedores, las redes y los volúmenes de almacenamiento de Docker. Docker utiliza su API REST de Docker Engine para interactuar con el demonio de Docker, al que se accede a través del protocolo HTTP.

CLI de Docker:

Crédito de la imagen: sombrero rojo

Es el cliente de línea de comandos de Docker para interactuar con el demonio de Docker. Es lo que usa cuando ejecuta cualquier comando de Docker.

El funcionamiento de Docker se basa en el kernel de Linux y las funciones de este kernel, como cgroups y espacios de nombres. Estas funciones separan los procesos para que puedan ejecutarse de forma independiente, ya que el propósito de los contenedores es ejecutar múltiples procesos y aplicaciones por separado.

Esto es lo que permite optimizar el uso de la infraestructura sin reducir el nivel de seguridad en comparación con los sistemas separados.

Todas las herramientas de contenedores como Docker vienen con un modelo de implementación basado en imágenes. Este modelo simplifica el uso compartido de una aplicación o un conjunto de servicios en varios entornos.

Además, Docker ayuda a automatizar la implementación de aplicaciones dentro de un entorno de contenedores. Con estas diversas herramientas, los usuarios obtienen acceso total a las aplicaciones y pueden acelerar la implementación, controlar las versiones y asignarlas.

Podman

Podman (el POD MANager) crea, ejecuta y administra contenedores OCI e imágenes de contenedores. Fue desarrollado por Red Hat y originalmente destinado a su empresa Linux 8. Se utiliza para la gestión de contenedores y actúa como el sucesor oficial de Docker.

En consecuencia, Red Hat suspendió el soporte para Docker, pero aseguró que el cambio sería fácil para los usuarios, ya que Podman se basa en Docker, aunque originalmente solo estaba destinado a ser una herramienta de depuración.

Gestiona todo el ecosistema de contenedores utilizando la biblioteca libpod. Dado que Podman solo funciona en plataformas Linux, actualmente se están desarrollando una API REST y clientes para permitir que los sistemas Mac y Windows llamen al servicio.

Sin embargo, actualmente existe un cliente remoto basado en Varlink que funciona en plataformas Mac o Windows que permite la comunicación remota con un servidor Podman basado en Linux. La biblioteca libpod admite varios métodos para cargar imágenes de forma segura, incluida la confianza y la verificación de imágenes.

También admite pods para administrar grupos de contenedores juntos y múltiples formatos de imagen, incluidos los formatos de imagen OCI y Docker.

En entornos muy pequeños y manejables, Podman puede incluso servir como precursor de Kubernetes. Cierra la brecha entre la gestión singular de instancias individuales de los primeros años de la exageración de los contenedores y la orquestación moderna con Kubernetes.

Los usuarios de contenedores ambiciosos ya pueden disfrutar del siguiente nivel con los pods. Ya no es necesaria la construcción y operación de un clúster de Kubernetes. En el caso más simple, los pods de nuevo diseño se pueden probar y mejorar en operaciones individuales. Incluso es posible una transferencia posterior a Kubernetes.

El comando podman generar kube proporciona los archivos de configuración correspondientes. Estos luego sirven uno a uno como entrada para la herramienta kubectl de Kubernetes.

Las versiones actuales de Podman pueden incluso crear archivos de configuración para systemd, un regalo para cualquiera que use el omnipresente sucesor init para la orquestación de contenedores.

Podman vs Docker: diferencias

Docker se ha establecido rápidamente como el caballo de batalla para la gestión de contenedores. Sin embargo, Docker tiene muchas ventajas y, sobre todo, el repertorio de imágenes en rápido crecimiento, así como desventajas y posibles riesgos de seguridad. Además, Docker ya no es compatible como contenedor para Kubernetes.

El hecho de que los contenedores, a diferencia de los sistemas virtuales, no requieran su kernel suele verse como una de las grandes ventajas. Sin embargo, representa un gran riesgo de seguridad con Docker porque los contenedores de Docker solo se pueden ejecutar con privilegios de root.

Permite que los procesos que se ejecutan en los contenedores accedan al kernel con privilegios de root y, por lo tanto, ataquen el sistema host.

La primera distinción es evidente cuando lo usa por primera vez. Si bien Docker requiere que se inicie primero el demonio de Docker, un contenedor de Podman se puede iniciar directamente desde la línea de comandos. Por lo tanto, no hay un proceso en segundo plano y la aplicación solo se ejecuta cuando es necesario.

Desde una perspectiva de seguridad, esto es bueno porque Podman es menos vulnerable a los ataques si el daemon no tiene que ejecutarse las 24 horas del día, los 7 días de la semana con privilegios de superusuario. Podman no requiere un proceso en segundo plano debido a la arquitectura, que difiere fundamentalmente de Docker.

Mientras que Docker sigue el modelo cliente-servidor, donde el cliente de Docker se comunica con el demonio de Docker a través de una API, Podman sigue el modelo fork-exec. Cada contenedor se ejecuta como un proceso secundario de Podman.

Se crea un espacio de nombres de usuario en el primer uso cuando Podman se ejecuta con privilegios de usuario normales. En el espacio de nombres de usuario, Podman se ejecuta con privilegios de raíz y tiene los derechos para montar sistemas de archivos y crear contenedores.

En consecuencia, el contenedor Podman solo tiene los derechos que tiene el usuario que lo ejecuta. El uso de espacios de nombres de usuario significa que cada usuario puede crear y administrar sus propios contenedores, pero estos no son visibles para otros usuarios ni para el superusuario.

Debido a que Podman funciona independientemente de Docker, los desarrolladores tienen mucho margen de maniobra y pueden responder a los deseos de la comunidad. Las adiciones interesantes a Podman incluyen el comando de montaje/desmontaje y la integración de systemd.

El host puede usar el comando de montaje/desmontaje para montar el sistema de archivos del contenedor, por ejemplo, para acceder o cambiar archivos y luego desmontarlos nuevamente.

Si bien la supervisión de los contenedores con systemd no funciona debido al daemon en Docker con Podman, los contenedores se pueden iniciar, supervisar e incluso reiniciar a través de systemd.

Además, Podman proporciona el comando podman generar systemd, que genera un servicio systemd correspondiente para el contenedor respectivo y, por lo tanto, exime al usuario de la creación de los servicios systemd, lo que significa que la integración en el sistema host está disponible.

Otra diferencia crucial entre Podman y Docker es que este último no cambia las reglas del firewall ni la instalación actual de dnsmasq debido a su capacidad para crear una red interna. Por el contrario, Docker tiene que sobrescribir las reglas del firewall para habilitar la comunicación entre contenedores.

PodmanDockerArchitecture DaemonDaemon lessSistema de gestión de serviciosdDocker EngineCompatibilidad con cortafuegosSobrescribe las reglas del cortafuegosRespeta las reglas del cortafuegosPlataformaCompatibilidad nativa con LinuxLinux, Windows y Mac

¿Cuándo debería migrar de Docker a Podman?

Si está implementando contenedores en un entorno basado en RHEL, en ese caso, no tiene muchas opciones, excepto usar Podman, ya que es nativo de RHEL. También puede migrar o elegir Podman sobre Docker si tiene implementaciones pequeñas con pocos contenedores.

Sin embargo, si quiere algo más complejo que eso, tenga varios contenedores y una pila de contenedores coordinados con docker-compose/podman-compose en una red. Es mejor usar Docker ya que maneja mucho mejor las redes.

Del mismo modo, si recién está comenzando a ingresar al mundo de los contenedores, en ese caso, Docker es una mejor opción ya que es estable, está bien establecido con la documentación adecuada y tiene una curva de aprendizaje poco profunda en comparación con Podman, que aún carece de estabilidad y no tiene una documentación bien definida.

Migración de Podman a Docker

Si está en la línea de comandos, es bastante fácil cambiar de Docker Engine a Podman. En su forma más simple, un alias $ funciona con el comando docker=podman la mayor parte del tiempo.

Por supuesto, esto supone que el software apropiado está instalado en el sistema. En el caso de Linux, esto tampoco es un problema; Los paquetes de software listos para usar están disponibles para distribuciones disponibles comercialmente.

Windows o macOS no se encuentran entre los sistemas operativos compatibles. El enfoque de alias funciona porque muchos comandos de Docker tienen un equivalente de Podman.

Pero también hay excepciones, ya que algunos comandos de Docker no tienen equivalente en el mundo de Podman. De manera similar, algunos comandos se comportan de manera diferente en Docker que en el universo de Podman. Por el momento, esto solo afecta el manejo de volúmenes que ya se han configurado.

El cambio es un poco más difícil cuando se utilizan herramientas gráficas como Docker Desktop. Debería afectar especialmente a aquellos desarrolladores que trabajan con Windows o macOS.

Los usuarios de Docker Desktop tendrán que acostumbrarse a la línea de comandos, y lo mismo se aplica a Docker compose. Sin embargo, existe el proyecto podman-compose. Escrito en Python, el software sirve como reemplazo de Docker compose.

Ultimas palabras

El reemplazo de Docker por Podman puede considerarse casi terminado. Para los usuarios y administradores, la mayoría de los aspectos de este cambio son sencillos. Muchas características de Docker tienen equivalentes idénticos en Podman.

Un beneficio real es la falta de un proceso de daemon singular y privilegios de raíz, sin mencionar el uso natural de grupos de contenedores. Sin embargo, vale la pena mencionar que Docker sigue siendo la tecnología principal con respecto a los contenedores, pero lo más probable es que esto cambie a largo plazo.

También puede explorar algunos comandos de Docker para administrar contenedores.