| Docker | Podman |
Demonio | Utiliza el demonio Docker | Arquitectura sin demonios |
Raíz | Ejecuta contenedores solo como root | Ejecuta contenedores como root y no root |
Imágenes | Puede crear imágenes de contenedores | Utiliza Buildah para crear imágenes de contenedores |
Plataforma monolítica | Sí | No |
Docker-enjambre | Compatible | No compatible |
Docker-compose | Compatible | Compatible |
Se ejecuta de forma nativa en | Linux, macOS, Windows | Linux, macOS, Windows (con WSL) |
Arquitectura
Docker utiliza arquitectura cliente-servidor. El demonio Docker es un proceso en segundo plano persistente que administra contenedores y mantiene la comunicación entre el cliente y el servidor. La salida de la docker version
El comando muestra secciones separadas para las versiones del cliente y del servidor.
Podman gestiona contenedores usando el modelo fork-exec. Dado que Podman es un proceso y no utiliza el paradigma cliente-servidor, no requiere un demonio para ejecutarse. Los contenedores Podman son procesos secundarios del proceso Podman principal. Usando la podman version
El comando muestra que Podman enumera solo un número de versión.
La unidad principal de la arquitectura Podman es un contenedor. Sin embargo, Podman también introduce el concepto de pod. Al igual que los pods de Kubernetes, los pods de Podman son grupos de uno o más contenedores que comparten los mismos recursos del sistema. El pod consiste en el contenedor principal y los contenedores sidecar que lo soportan.
Facilidad de uso
Docker cuenta con un conjunto completo de comandos sencillos e intuitivos. Con Docker, los desarrolladores pueden crear, implementar y administrar fácilmente aplicaciones en contenedores.
Podman fue creado para reemplazar a la perfección a Docker en un flujo de trabajo de desarrollo de software, por lo que sus comandos son en su mayoría los mismos que los de Docker. Por ejemplo, el docker pull
el comando se convierte en podman pull
:
Además de que Podman hereda la facilidad de uso de Docker, la similitud entre las dos herramientas también significa que la migración de Docker a Podman requiere poco esfuerzo.
Privilegios de raíz
Docker requiere privilegios de root para comunicarse con el daemon ya que el daemon siempre se ejecuta como usuario root. Si un usuario no es miembro de docker build
grupo Unix, deben ejecutar los comandos de Docker usando el comando sudo. Es posible ejecutar Docker en modo sin raíz, pero requiere la instalación de paquetes adicionales y controladores de almacenamiento específicos.
Podman es desarraigado por diseño. Gracias a su arquitectura modular, es posible otorgar diferentes privilegios a diferentes usuarios.
Imágenes de construcción
Docker utiliza la compilación docker build
Comando para crear imágenes de contenedor a partir de un dockerfile y un contexto de compilación. El contexto de compilación es un conjunto de archivos especificados en el archivo acoplable que se usa en la creación del contenedor.
Podman incluye la podman build
comando que funciona usando una sintaxis similar a docker build
.
Sin embargo, Podman usa Buildah , otra herramienta de código abierto, para realizar el proceso de construcción. Cuando podman build
se ejecuta, el buildah bud
(build-using-dockerfile) se llama al comando para emular docker build
comando.
Contenedores en ejecución
Cuando Docker recibe el comando de ejecución de la ventana acoplable, realiza varias acciones:
- Comprueba si la imagen especificada por el usuario existe localmente. Si no, extrae la imagen de los registros configurados.
- Crea una capa contenedora en la que se puede escribir encima de la imagen.
- Inicia el contenedor.
Ejecución de contenedores con Podman se realiza usando el podman run
comando, que funciona de la misma manera que docker run
. Uno de los principales beneficios de Podman en comparación con Docker es que Podman se integra completamente con systemd por defecto. Esto permite que Podman ejecute systemd dentro del contenedor listo para usar.
Docker Swarm y Docker Compose
Enjambre Docker es una plataforma de orquestación de contenedores utilizada para administrar contenedores Docker. Permite a los desarrolladores ejecutar un clúster de nodos Docker e implementar una aplicación escalable sin necesidad de otras dependencias.
Podman no es compatible con Docker Swarm. Sin embargo, los usuarios de Podman pueden usar herramientas como Nomad, que viene con un controlador de Podman.
Docker Compose es una herramienta para administrar entornos de aplicaciones de varios contenedores. Automatiza el inicio y la gestión de contenedores, lo que lo hace útil como parte de un ciclo de vida de desarrollo de software (SDLC).
A partir de la versión 3.0, Podman es compatible con Docker Compose. Las versiones anteriores de Podman no tenían una forma de simular el demonio Docker necesario para que Docker Compose funcionara, por lo que usaban alternativas menos fáciles de usar como Podman Compose. Sin embargo, Podman 3.0 presenta podman.socket
, un socket UNIX que reemplaza al demonio Docker.
Seguridad
Docker es, por diseño, considerado una herramienta segura, especialmente cuando los procesos son ejecutados por usuarios sin privilegios. No se recomienda ejecutar contenedores en modo privilegiado desde una perspectiva de seguridad.
Al igual que con cualquier otra herramienta, Docker se vuelve aún más seguro si los usuarios aplican las mejores prácticas de seguridad. La seguridad de Docker se puede aumentar aún más al habilitar AppArmor, SELinux y GRSEC.
Podman La arquitectura fork-exec de hace que sea una solución aún más segura que Docker. El modelo fork-exec permite que el sistema registre correctamente al usuario que modifica los archivos del sistema, mientras que el enfoque cliente-servidor utilizado por Docker no lo hace. Por lo tanto, Podman permite un registro de auditoría más profundo.
Los contenedores sin raíz son otra característica de Podman que mejora la seguridad general del sistema. Poder asignar privilegios específicos a usuarios específicos permite a los administradores tener un mejor control de acceso a los componentes críticos del servidor.
Podman frente a Docker:cómo elegir
Elija Docker si:
- Prefieres una herramienta bien documentada . La principal ventaja de Docker sobre Podman es su uso generalizado. Una gran cantidad de soporte relacionado con Docker disponible en línea significa que buscar en Internet puede resolver muchos problemas potenciales.
- Necesita soporte de orquestación de contenedores . La compatibilidad con Docker Swarm es otro beneficio importante de Docker. Los usuarios que quieran orquestar contenedores Podman deben recurrir a alternativas que no son tan ricas en funciones como Docker Swarm o sumergirse en Kubernetes, que tiene una curva de aprendizaje pronunciada y puede resultar demasiado complejo para proyectos más simples.
Elija Podman si:
- Haces hincapié en la seguridad . La arquitectura de Podman es inherentemente más segura que la de Docker.
- Planeas cambiarte a Kubernetes más adelante . Podman presenta el concepto de pod, lo que lo convierte en un buen punto de partida para Kubernetes.
Dado que tanto Docker como Podman son compatibles con OCI, también es posible usarlos en paralelo. Por ejemplo, la solidez de Docker puede emplearse en máquinas de desarrollo, mientras que los entornos de desarrollo, int y producción pueden beneficiarse de la mayor seguridad de Podman.