curso
Docker frente a Podman: ¿Qué herramienta de contenedorización es la adecuada para ti?
Los contenedores ejecutan las aplicaciones y cargas de trabajo de datos del mundo. Conceptualizados por primera vez en los años 70, los contenedores ofrecen una forma de empaquetar todo lo necesario para ejecutar una aplicación o carga de trabajo en un único objeto. Los contenedores ayudan a resolver el problema de "se ejecuta en mi máquina" ofreciendo una solución aislada y portátil para desarrollar, probar y enviar código. Herramientas como Kubernetes dependen en gran medida de los contenedores como componente central de su arquitectura. Por ahora, los contenedores no van a ninguna parte.
Para ejecutar estos contenedores, necesitarás una solución de gestión de contenedores. Entra en Docker y Podman.
Docker y Podman se utilizan para construir, gestionar y desplegar contenedores. Juntos, desentrañaremos las similitudes y diferencias entre Docker y Podman, junto con la funcionalidad única de cada uno. Exploraremos aspectos como la arquitectura basada o no en demonios, la gestión de múltiples contenedores y la integración entre plataformas. Al final, dispondrás de la información que necesitas para elegir la solución de contenedor perfecta para tus necesidades.
Si eres nuevo en estas herramientas, también puedes consultar nuestra Introducción a Docker y el tutorial Introducción a Podman para el aprendizaje automático.
Conviértete en Ingeniero de Datos
¿Qué son Podman y Docker?
Empecemos con una visión general de estas herramientas para iniciar nuestra comparación:
Visión general de Docker
Docker es el estándar de facto para construir, ejecutar y enviar contenedores. Los contenedores son objetos que combinan dependencias a nivel de sistema operativo y algún tipo de código de aplicación para empaquetar y ejecutar cosas como aplicaciones full-stack o ETL pipelines en su propio entorno aislado. Los contenedores son como pequeños ordenadores que sólo tienen lo esencial para ejecutar algún tipo de código.
Docker es bastante joven y se lanzó por primera vez como proyecto de código abierto en 2013. Desde entonces, el proyecto ha explotado.
Cuando se trata de ejecutar contenedores en un entorno empresarial, casi todos los equipos de software y datos recurren a Docker.
Los desarrolladores pueden ejecutar Docker en los tres principales sistemas operativos, y se integra perfectamente con casi todas las tecnologías modernas. Esto significa que un ingeniero de datos podría escribir y empaquetar una canalización de datos utilizando un contenedor Docker en su Mac local, y enviar ese contenedor para que se ejecute en AWS ECS.
Herramientas como Docker CLI, Docker Desktop y Docker Hub facilitan los primeros pasos a desarrolladores de todos los niveles.
Si buscas una forma más práctica de aprender Docker, tenemos varios proyectos Docker e información sobre certificaciones Docker que te ayudarán a mejorar tus conocimientos sobre Docker.
Visión general de Podman
Al igual que Docker, Podman es una herramienta de código abierto para desarrollar y gestionar contenedores. Podman fue desarrollado originalmente por Red Hat como una alternativa nativa de Linux a Docker y fue lanzado en 2019.
Lo más notable es que la arquitectura subyacente de los dos tiempos de ejecución de contenedores difiere; mientras que Docker utiliza demonios, Podman se ejecuta sin demonios (más sobre esto más adelante).
A diferencia de Docker, Podman no requiere acceso root a la máquina donde se ejecutan los pods que gestiona; esto hace que Podman sea una opción más segura para los equipos que utilizan contenedores para ejecutar sus aplicaciones y cargas de trabajo.
A los usuarios de Podman se les proporciona una experiencia de usuario similar a la de Docker; los desarrolladores pueden utilizar una CLI o una GUI (Podman Desktop) para interactuar con Podman en su entorno local.
Los usuarios de Linux, Mac y Windows pueden utilizar Podman para construir y probar sus contenedores localmente antes de desplegarlos en algún tipo de entorno remoto, como Kubernetes.
Diferencias clave entre Podman y Docker
Arquitectura daemon vs. daemonless
La mayor diferencia entre Docker y Podman es la arquitectura subyacente sobre la que cada uno está construido. Docker depende en gran medida de un demonio, mientras que Podman no tiene demonio.
Puedes pensar en un demonio como un proceso que se ejecuta en segundo plano en el sistema operativo anfitrión. En el caso de Docker, su demonio se encarga de gestionar los objetos Docker (imágenes y contenedores) y de comunicarse con otros sistemas. Para ejecutar su demonio, Docker utiliza un paquete llamado dockerd.
¿Por qué es importante? Para empezar, los demonios suelen requerir acceso de nivel raíz a la máquina en la que se ejecutan. Esto se presta a vulnerabilidades de seguridad: si un actor malintencionado puede acceder a un demonio, ahora tiene acceso a toda la máquina.
La arquitectura sin demonio de Podman tiene algunas ventajas. Como ejecutar demonios casi siempre requiere privilegios de root, una arquitectura sin demonios puede considerarse "sin root". Esto significa que los usuarios que no tienen acceso a nivel de sistema a la máquina en la que se ejecutan sus contenedores pueden seguir utilizando Podman; esto no siempre ocurre con Docker.
En lugar de un demonio, Podman utiliza un paquete de Linux conocido como systemd. Dado que systemd es nativo del sistema operativo Linux, Podman suele considerarse más "ligero" que Docker; los usuarios de Podman normalmente verán tiempos de arranque de contenedores más rápidos que cuando utilizan Docker.
Construir imágenes y contenedores
A pesar de sus arquitecturas fundamentalmente diferentes, tanto Docker como Podman comparten el mismo propósito central: crear y ejecutar imágenes y contenedores. Sin embargo, sus enfoques de este proceso difieren ligeramente.
Con Docker, una imagen se construye añadiendo primero comandos a un Dockerfile. A continuación, se ejecuta un comando como docker build. Esto llama a cada una de las declaraciones del Dockerfile, construyendo finalmente una imagen. Una imagen puede "ejecutarse" como contenedor. Como habrás adivinado, esto se hace utilizando el comando docker run, y especificando un ID o etiqueta de imagen. Para construir y ejecutar varios contenedores, utilizaremos una herramienta especial llamada docker-compose, que exploraremos un poco más adelante.
El proceso de crear imágenes y ejecutarlas como contenedores es casi idéntico en Podman. En lugar de un Dockerfile (aunque este nombre de archivo seguiría funcionando), los usuarios de Podman crearán un Containerfile. La sintaxis para componer la imagen es la misma. Una vez añadidos los comandos apropiados al Containerfile, la imagen puede construirse y ejecutarse utilizando la CLI de Podman.
En su mayor parte, Podman es compatible con la mayoría de las cosas de Docker. Encontrarás diferencias aquí y allá, pero en su mayor parte, la CLI de Docker puede intercambiarse con la CLI de Podman sin problemas.
Podman vs Docker Desktop
Docker Desktop para un acceso multiplataforma simplificado
Hay varias formas de trabajar con Docker. Los profesionales experimentados en software y datos suelen recurrir a la CLI de Docker (también conocida como cliente Docker) para interactuar con sus imágenes y contenedores Docker.
Sin embargo, hay una forma aún más fácil de empezar, y es con Docker Desktop.
Docker Desktop es una herramienta gratuita basada en GUI que proporciona una interfaz para que los usuarios construyan y gestionen las imágenes y contenedores que ejecutan sus aplicaciones o cargas de trabajo. Un ingeniero de datos puede utilizar Docker Desktop para ver las imágenes disponibles en su máquina y girar esa imagen en un contenedor. Del mismo modo, un desarrollador de software puede descargar una imagen de Docker Hub para utilizarla al comenzar su próximo proyecto.
La interfaz de usuario es sencilla e intuitiva de utilizar, al tiempo que mantiene una visibilidad y un control completos de tu entorno Docker.
Sin embargo, Docker Desktop ofrece algo más que ver y gestionar objetos Docker.
Los usuarios pueden hacer cosas como gestionar (hasta el byte) los recursos disponibles para sus objetos Docker, adjuntarlos a un contenedor en ejecución o lanzar un clúster Kubernetes en su máquina local. Los usuarios de Docker Desktop pueden elegir entre cientos de extensiones, o iniciar su andadura en Docker con útiles tutoriales y entornos de muestra. Por suerte para ti, Docker Desktop es ampliamente accesible y funciona en Mac, Windows o Linux.
Características y limitaciones de Podman Desktop
Podman Desktop se parece bastante a su homólogo Docker. Desde la interfaz de Podman Desktop, los usuarios pueden ver y gestionar contenedores, imágenes, pods y volúmenes. Al igual que con Docker, Podman admite plugins e integraciones para hacer cosas como ejecutar un clúster Red Hat OpenShift localmente o trabajar con LLMs utilizando el Podman AI Lab.
Si tienes un plugin personalizado que te gustaría utilizar, estupendo: puedes instalarlo desde Podman Desktop.
Si eres usuario tanto de Docker como de Podman, puede que te sorprenda ver objetos tanto de Docker como de Podman en la interfaz de Podman Desktop. No es casualidad. En breve examinaremos más detenidamente lo que esto implica. Mientras tanto, esto significa que los usuarios pueden interactuar tanto con sus objetos Podman COMO Docker, todo a través de un único panel de cristal.
El caso de uso más común de los contenedores es ejecutarlos a través de Kubernetes. A pesar de que Docker es el título estándar de la industria para la contenerización, Podman proporciona una experiencia Kubernetes más robusta en Podman Desktop.
La posibilidad de ver y gestionar recursos de Kubernetes como nodos, pods, despliegues (y mucho más) hace que la administración y el desarrollo de Kubernetes sean ciudadanos de primera clase en Podman Desktop. Estas herramientas, además de plugins como la ya mencionada integración con Red Hat OpenShift, diferencian a Podman como herramienta orientada a tiendas Kubernetes.
Podman Compose vs Docker Compose
Definir y gestionar aplicaciones multicontenedor con Docker
Algunas aplicaciones y cargas de trabajo pueden empaquetarse en un único contenedor. Algunos no pueden. Para facilitar la gestión de varios contenedores, Docker ofrece una herramienta llamada Docker Compose. Docker Compose utiliza un único archivo YAML para definir los componentes de tu aplicación.
Después, utilizando la CLIde docker-compose, estos contenedores y servicios pueden iniciarse, detenerse o reconstruirse. Un archivo YAML de Docker Compose puede tener un aspecto parecido a este
yaml
version: '3'
services:
app:
image: python:3.10
container_name: app
command: run app --host=0.0.0.0
database:
image: postgres:13
container_name: database
ports: 5432
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data
Hay muchas cosas, pero lo que Docker Compose nos permite hacer es definir un archivo YAML con dos servicios y un volumen. A continuación, el comando docker-compose up pondrá en marcha estos contenedores, y tendremos una aplicación en funcionamiento .
Para los equipos de software y datos que ejecutan grandes aplicaciones y cargas de trabajo, Docker Compose facilita tanto el desarrollo local como el envío y la ejecución de código en un entorno de producción.
El enfoque de Podman para las aplicaciones multicontenedor
Ejecutar aplicaciones multicontenedor con Podman es exactamente igual que trabajar con Docker. Podman lo hace utilizando Podman Compose. Al igual que Docker Compose, Podman Compose utiliza archivos YAML para definir los componentes de una aplicación de forma declarativa.
El sitio podman-compose para activar, desactivar o reiniciar los servicios definidos en el archivo YAML.
En su mayor parte, podman-compose puede utilizarse en lugar de docker-compose (hay algunas incompatibilidades aquí y allá). Al igual que con Docker, el uso de Podman Compose permite gestionar aplicaciones multicontenedor de forma independiente y flexible.
A continuación verás una tabla comparativa entre Docker y Podman.
Característica/Aspecto |
Docker |
Podman |
Arquitectura |
Docker utiliza un demonio como componente arquitectónico básico. |
Arquitectura sin demonio. |
Seguridad |
Requiere privilegios de root para construir, ejecutar y gestionar contenedores. |
La naturaleza sin demonio de la arquitectura de Podman hace que sea una herramienta de gestión de contenedores más consciente de la seguridad. |
Herramientas de usuario |
Escritorio Docker, CLI Docker |
Podman Desktop, podman CLI |
Compatibilidad |
Windows, Mac, Linux |
Nativo de Linux, disponible para Windows y Mac. |
Adopción |
Estándar industrial para la orquestación de contenedores con una comunidad masiva y compatibilidad casi universal. |
Alternativa a Docker con una comunidad más pequeña, pero en crecimiento. |
Casos de uso y mejores escenarios para Podman vs Docker
Exploremos ahora la pregunta clave que puedes estar haciéndote: ¿cuándo debes utilizar Docker y cuándo Podman? Veámoslo más de cerca.
Cuándo utilizar Docker
Docker es el estándar de facto para construir, ejecutar y enviar contenedores. Si te estás iniciando en la contenedorización (especialmente en tu máquina personal), prueba a utilizar Docker.
Es sencillo poner en marcha tu primer (o quincuagésimo) contenedor utilizando herramientas como Docker Desktop o la CLI de Docker. Docker tiene una comunidad masiva, y lo más probable es que lo que intentas hacer ya se haya hecho. Esto ayuda a facilitar cosas como la resolución de problemas.
Docker ofrece más coherencia entre plataformas que Podman. Y lo que es más importante, Docker se integra con casi todos los servicios basados en contenedores, incluidos AWS ECS, Azure AKS y Google Cloud Run.
Esto significa que cuando llegue el momento de ejecutar tus contenedores en producción, podrás integrarlos fácilmente con el servicio que elijas. La capacidad de pasar del desarrollo local a la producción es una de las partes más potentes de contenerizar tu código con Docker.
No sólo los equipos de Ingeniería de Software y Datos utilizan Docker. Ingenieros de IA y ML, científicos de datose incluso analistas de datos utilizan Docker para potenciar su trabajo.
Cuándo utilizar Podman
Para los desarrolladores que trabajan en un entorno sensible a la seguridad o muy regulado, Podman puede ser tu gestor de contenedores de hoy. Recuerda que Podman es rootless, lo que significa que un usuario que ejecute Podman localmente no necesita acceso root a su máquina para construir y gestionar contenedores localmente. A continuación encontrarás algunas razones más por las que puede tener sentido inclinarse por Podman en lugar de Docker.
- Estás desarrollando localmente en una máquina Linux.
- El uso de recursos subyacentes y el tiempo de giro del contenedor son importantes para ti.
- Piensas enviar tus contenedores a un clúster Kubernetes o quieres imitar un entorno Kubernetes en tu máquina local.
Otra cosa a tener en cuenta: en su mayor parte, Podman y Docker son intercambiables. Eso significa que si empiezas a utilizar Docker y te das cuenta de que Podman es la herramienta que te conviene, es fácil cambiar entre las dos ofertas.
Conclusión
Ejecutar contenedores requiere una herramienta para gestionar estos objetos. Juntos, exploramos dos de las herramientas de contenedorización más populares: Docker y Podman.
Docker, el estándar del sector para la contenerización, es utilizado por millones de personas para ejecutar las aplicaciones y cargas de trabajo de datos del mundo. La arquitectura de Docker se basa en el demonio Docker, que requiere acceso root al sistema en el que se ejecuta el contenedor.
Para interactuar con Docker, los desarrolladores pueden utilizar Docker CLI o Docker Desktop, que ofrecen la posibilidad de gestionar cosas como imágenes, contenedores y volúmenes. La adopción generalizada de Docker significa una comunidad grande y vibrante, así como soporte en los tres principales sistemas operativos y en casi todos los servicios basados en contenedores.
Podman ofrece una solución alternativa de gestión de contenedores. Podman es daemonless y rootless, lo que significa que un usuario no necesita acceso root a la máquina que está utilizando para ejecutar Podman. Esto resulta atractivo para los equipos que exigen una herramienta de gestión de contenedores más consciente de la seguridad. Al igual que Docker, Podman ofrece tanto una CLI como una UI para construir y gestionar contenedores. Aunque es nativo de Linux, Podman puede ejecutarse tanto en Windows como en Mac y se integra bastante bien con herramientas como AWS ECS y Azure AKS.
Independientemente de la herramienta que elijas, aprender a "contenerizar" el código que escribes es una de las formas más rápidas de aumentar tus habilidades de desarrollo. Si quieres aprender más sobre Docker y Podman, no tengas miedo de ensuciarte las manos con cursos como Introducción a Docker o Conceptos de virtualización y contenedores. Mucha suerte y ¡feliz codificación!
Preguntas frecuentes sobre Podman vs Docker
¿Qué es un contenedor?
Un contenedor es un objeto que contiene todo lo necesario para ejecutar una aplicación o una carga de trabajo de datos. Puedes pensar en los contenedores como pequeños ordenadores que sólo tienen lo esencial para ejecutar algún tipo de código. Por suerte, podemos ejecutar estos contenedores tanto en nuestras máquinas locales como en servidores que hacen accesible al mundo una solución.
¿Por qué debería utilizar un contenedor en mi proyecto?
Utilizar un contenedor en tus proyectos te permite empaquetar tu código en un único objeto. ¿Por qué es importante? Significa que puedes compartir fácilmente tu código con otros desarrolladores o incluso enviar tu código a producción sin tener que recrear todo tu entorno local.
¿Por qué necesito utilizar un gestor de contenedores como Docker o Podman?
Para construir, ejecutar y gestionar un contenedor necesitas utilizar un gestor de contenedores. Docker y Podman proporcionan herramientas para crear y probar tu contenedor antes de desplegar tu solución en el mundo. Sin una herramienta como Docker o Podman, estas tareas serían bastante complicadas.
¿Qué significa "sin demonio"?
Un demonio es un proceso que siempre se ejecuta en segundo plano. Daemonless significa que la herramienta existe sin tener siempre un proceso ejecutándose en segundo plano.
¿Existen otros gestores de contenedores además de Docker o Podman?
Containerd y LXC son dos populares sistemas de gestión de contenedores que ayudan a construir, ejecutar y gestionar contenedores a escala.
Soy ingeniero de datos en Delaware North, y me especializo en crear infraestructuras de datos resistentes y escalables utilizando Airflow, Databricks y AWS. Jake también es el instructor del curso Introducción a las canalizaciones de datos e Introducción a NoSQL de DataCamp.
Los mejores cursos de DataCamp
curso
Intermediate Docker
programa
Containerization and Virtualization
blog
¿Qué es shell?
Wendy Gittleson
13 min
blog
Azure Synapse frente a Databricks: Comprender las diferencias
Gus Frazer
14 min
blog
AWS frente a Certificaciones Azure: ¿Cuál es el mejor para ti?
blog
AWS vs Azure: Una comparación en profundidad de los dos principales servicios en la nube
tutorial