Si está metido en el mundo de la virtualización y la contenedorización, es probable que se haya topado con Podman y Docker y se pregunte en qué se diferencian.

En este post, exploraremos las diferencias entre Docker y Podman e intentaremos averiguar cuál será la opción más adecuada para usted

Docker

docker

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

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

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

Docker Daemon:

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

CLI de Docker:

Docker
Crédito de la imagen: Redhat

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

El funcionamiento de Docker se basa en el núcleo Linux y en las funciones de este núcleo, como cgroups y namespaces. 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 despliegue 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 el despliegue de aplicaciones dentro de un entorno de contenedores. Con estas diversas herramientas, los usuarios obtienen acceso completo a las aplicaciones y pueden acelerar el despliegue, controlar las versiones y asignarlas.

Podman

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

podman

En consecuencia, Red Hat dejó de dar soporte a Docker pero aseguró que el cambio sería fácil para los usuarios ya que Podman se basa en Docker aunque originalmente sólo estaba pensado como herramienta de depuración.

Gestiona todo el ecosistema de contenedores utilizando la biblioteca libpod. Dado que Podman sólo funciona en plataformas Linux, actualmente se está desarrollando una API REST y clientes que permitan a los sistemas Mac y Windows llamar al servicio.

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

También admite pods para gestionar 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 servir incluso como precursor de Kubernetes. Tiende un puente entre la gestión singular de instancias individuales de los primeros años del bombo de los contenedores y la orquestación moderna con Kubernetes.

Los usuarios ambiciosos de contenedores ya pueden disfrutar del siguiente nivel con los pods. La construcción y el funcionamiento de un clúster Kubernetes ya no son necesarios. En el caso más sencillo, los pods recién diseñados pueden probarse y mejorarse en operaciones individuales. Incluso es posible una transferencia posterior a Kubernetes.

El comando podman generate kube suministra los archivos de configuración correspondientes. Éstos sirven entonces de entrada para la herramienta kubectl de Kubernetes.

Las versiones actuales de Podman pueden incluso crear archivos de configuración para systemd – una delicia para cualquiera que utilice el omnipresente sucesor init para la orquestación de contenedores.

podman-generate
Crédito de la imagen: Redhat

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 núcleo suele considerarse una de las grandes ventajas. Sin embargo, supone un gran riesgo para la seguridad, ya que los contenedores Docker sólo pueden ejecutarse con privilegios de root.

Esto permite que los procesos que se ejecutan en los contenedores accedan al núcleo con privilegios de root y ataquen así al sistema anfitrión.

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

Desde el punto de vista de la seguridad, esto es bueno porque Podman es menos vulnerable a los ataques si el demonio no tiene que ejecutarse 24/7 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, en el que el cliente de Docker se comunica con el demonio de Docker a través de una API, Podman sigue el modelo tenedor-ejecución. Cada contenedor se ejecuta como un proceso hijo 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 root y tiene derechos para montar sistemas de archivos y crear contenedores.

En consecuencia, el contenedor de Podman sólo 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 gestionar sus propios contenedores, pero éstos no son visibles para otros usuarios ni para el superusuario.

Como Podman funciona independientemente de Docker, los desarrolladores tienen mucho margen de maniobra y pueden responder a los deseos de la comunidad. Algunas adiciones interesantes a Podman son el comando mount/unmount y la integración con systemd.

El anfitrión puede utilizar el comando mount/unmount para montar el sistema de archivos del contenedor, por ejemplo, para acceder a los archivos o modificarlos y luego volver a desmontarlos.

Aunque la monitorización de los contenedores mediante systemd no funciona debido al demonio de Docker con Podman, los contenedores pueden iniciarse, monitorizarse e incluso reiniciarse a través de systemd.

Además, Podman proporciona el comando podman generate systemd, que genera un servicio systemd correspondiente para el contenedor respectivo y libera así al usuario de la creación de los servicios systemd, lo que significa que la integración en el sistema anfitrión está disponible.

Otra diferencia crucial entre Podman y Docker es que este último no modifica las reglas del cortafuegos 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 cortafuegos para permitir la comunicación entre contenedores.

PodmanDocker
Arquitectura DaemonDaemon menos
Gestión de servicios SystemdMotor Docker
Compatibilidad con cortafuegosSobrescribe las reglas del cortafuegosRespeta las reglas del cortafuegos
PlataformaCompatibilidad nativa con linuxLinux, Windows y Mac

Cuándo debería migrar de Docker a Podman

Si está desplegando contenedores en un entorno basado en RHEL, en ese caso, no tiene muchas opciones excepto utilizar Podman ya que es nativo de RHEL. También puede migrar a Podman o elegirlo en lugar de Docker si tiene despliegues pequeños con pocos contenedores.

Sin embargo, si quiere ser más complejo que eso, tenga múltiples contenedores y una pila de contenedores coordinados con docker-compose/podman-compose sobre una red. Es mejor utilizar Docker ya que maneja mucho mejor la red.

Del mismo modo, si está empezando a adentrarse en el 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 comando $ alias docker=podman funciona la mayoría de las veces.

Por supuesto, esto supone que el software apropiado está instalado en el sistema. En el caso de Linux, esto tampoco es un problema; existen paquetes de software listos para usar para las 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 en Podman.

Pero también hay excepciones, ya que algunos comandos Docker no tienen contrapartida en el mundo Podman. Del mismo modo, algunos comandos se comportan de forma diferente en Docker que en el universo Podman. Por el momento, esto sólo afecta al manejo de volúmenes que ya han sido configurados.

El cambio es un poco más difícil cuando se utilizan herramientas gráficas como Docker Desktop. Debería afectar especialmente a los 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 ocurre con Docker compose. Sin embargo, existe el proyecto podman-compose. Escrito en Python, el software sirve como sustituto de Docker compose.

Palabras finales

La sustitución de Docker por Podman puede considerarse casi hecha. Para los usuarios y administradores, la mayoría de los aspectos de este cambio son sencillos. Muchas funciones de Docker tienen equivalentes idénticos en Podman.

Una ventaja real es la ausencia de un proceso demonio singular y de privilegios de root, por no mencionar el uso natural de grupos de contenedores. Sin embargo, cabe mencionar que Docker sigue siendo la tecnología principal en lo que respecta a los contenedores, pero lo más probable es que esto cambie a largo plazo.