La contenerización está de moda en este momento. Docker, presentado en 2014, se ha convertido en la herramienta más popular para administrar contenedores. Más tarde, en 2018, Red Hat presentó Podman como alternativa a Docker.
Dado que tanto Docker como Podman están destinados a hacer lo mismo, veamos qué ventajas tiene uno sobre el otro.
Comprender primero la “contenerización”
Supongamos que usted es la persona de TI de su organización. Se le pide que implemente una variedad de software de misión crítica. ¿Qué pasa si el softwareAsoftwareBtienen la misma dependencia pero requieren diferentes versiones de la misma dependencia? O peor aún, ¿qué pasa si la dependencia del softwareAconflictos con la dependencia del softwareB?
En ese caso, los implementa en máquinas virtuales separadas. Pero eso elimina el factor de escalabilidad. Con dos máquinas virtuales en ejecución [on the same hardware], el software hereda solo el 50% de la potencia de cálculo total del sistema. Aumente la cantidad de software necesario de 2 a 10 y comprenderá lo ridículo que se vuelve esto.
Un aspecto negativo inherente de una máquina virtual es que también ejecuta un sistema operativo completo. En este escenario, esto es un negativo neto. Si tiene diez máquinas virtuales que ejecutan RHEL, tiene diez copias de los mismos archivos binarios, lo que acapara su memoria RAM de manera ineficiente. Incluso la instalación más mínima resultará enmás de 4 GB de espacio en disco por máquina virtual.
Entonces, en lugar de una máquina virtual, donde tiene un sistema operativo completo, su software y sus dependencias, que es altamente ineficiente (en este escenario particular), puede tener una imagen de contenedor. Estas imágenes de contenedor solo tienen el software y sus dependencias empaquetados juntos. ¡Una ventaja adicional es que estas imágenes de contenedores suelen tener menos de 300 MB de tamaño!
El problema radica en la naturaleza de las máquinas virtuales. Cuando crea una máquina virtual, el hardware se virtualiza. Eso significa que la CPU, la RAM, el almacenamiento y otros recursos están virtualizados. Esto está obligado a tener una sobrecarga notable.
Mientras tanto, con los contenedores, el software (su sistema operativo) se virtualiza. Esto tiene una sobrecarga baja en comparación con las máquinas virtuales tradicionales.
Entonces, ¿por qué necesito Docker o Podman?
Es posible que haya utilizado Oracle VirtualBox para administrar máquinas virtuales en el pasado. VirtualBox le permite crear, iniciar, detener, pausar, modificar e incluso eliminar máquinas virtuales. Eso es lo que Docker y Podamn también hacen, pero para el software en contenedores.
Si bien Docker y Podman tienen filosofías diferentes, ambos lo ayudan a administrar sus contenedores. Así que ahora echemos un vistazo a cómo difieren y cuál es el mejor para su caso de uso.
Docker contra Podman
Como mencioné anteriormente, Docker y Podman son software de administración de contenedores y son excelentes en eso. Cuando Red Hat anunció Podman como una alternativa a Docker, dijeron quePodman es compatible con la interfaz de línea de comandos de Docker. Es decir, pasar de Docker a Podman no requerirá cambios importantes en su código existente. Esto también significa que puede simplemente sustituir eldocker
comando conpodman
y simplemente funciona™.
Pero todavía tienen algunas diferencias fundamentales clave, así que veámoslas.
1. basado en demonio versus basado en demonio. sin demonio
La principal diferencia que distingue a Docker y Podman es la forma en que se ejecutan en su sistema.
El núcleo de Docker se ejecuta como un demonio (dockerd
). Es decir, siempre se ejecuta en segundo plano, administrando los contenedores. Mientras tanto, Podman es como un programa promedio; una vez que realiza una acción (iniciar/detener un contenedor) usando Podman, se cierra.
El enfoque basado en demonios de Docker tiene los siguientes beneficios para usted:
- Le permite iniciar fácilmente contenedores automáticamente cuando se inicia el sistema.
- Dado que Docker es un demonio en sí mismo, no se necesita un administrador de servicios externo como systemd.
Eso no significa que Podman sea malo. A continuación se muestran los beneficios que ofrece Podman sobre Docker:
- Si el demonio Docker falla, los contenedores se encuentran en un estado incierto. Esto se evita haciendo que Podman no tenga demonios.
- Puede usar systemd para administrar sus contenedores. Eso le brinda una capacidad de configuración prácticamente ilimitada en comparación con Docker.
- Conectar Podman con systemd también le permite actualizar contenedores en ejecución con un tiempo de inactividad mínimo. También puede recuperarse de cualquier mala actualización.
2. Seguridad
El mayor argumento para usar Podman sobre Docker es la seguridad (bueno, más o menos). Podman se presenta como una alternativa más segura a Docker.
En mi opinión, si usted es una persona preocupada por la seguridad, dos de las características principales de Podman lo atraerán. Anteriormente, mencioné que el principal factor diferenciador entre Docker y Podman es que Podman no se ejecuta como un demonio.
La segunda característica principal de Podman es que puede ejecutar contenedores sin acceso de root. ¿Qué significa esto? Significa que no necesita privilegios de superusuario para administrar contenedores.
Tengo tres argumentos de por qué debería usar Podman en lugar de Docker si tiene ansiedad por la seguridad cibernética, como yo.
Argumento 1: dockerd se ejecuta como root
Como ya sabrá, el núcleo de Docker se ejecuta como un “demonio del sistema”, es decir, como un demonio ejecutado por elroot
usuario.
Ya he mencionado los beneficios de tener un daemon, pero ejecutar un daemon como elroot
el usuario también tiene algunos problemas de seguridad.
Principalmente, si el demonio Docker (dockerd
) se ve comprometida, se queda con un sistema en el que un atacante puede obtener acceso de root. Ciertamente no quieres eso, ¿verdad?
La ventaja de usar Podman es visible aquí. Podman no tiene un demonio en ejecución. Y ciertamente no tiene requisitos estrictos para el acceso de root. Esto nos lleva al segundo argumento.
Argumento 2: Podman admite contenedores desarraigados
Si de alguna manera se enteró de Podman, es posible que también haya escuchado que admite la ejecución de contenedores sin acceso de root.
Eso es ciertamente muy cierto y extremadamente bueno para la seguridad.
Supongamos que el demonio Docker es seguro. Ahora suponga que la imagen del contenedor que está utilizando tiene una falla de seguridad. Pero esto no lo sabe el desarrollador.
Si esta imagen se ejecuta en un contenedor que es propiedad delroot
usuario, eresSOL.
Con Podman, tiene la capacidad de ejecutar un contenedor sin necesidad de privilegios de root. Eso significa que, incluso si la imagen de un contenedor tiene una vulnerabilidad de seguridad, solo el usuario propietario de ese contenedor está comprometido. Otros usuarios en ese sistema aún están seguros, especialmente el usuario raíz.
Docker recientemente obtuvo soporte para la ejecución sin raíz de contenedores, pero le faltan algunas características. Es decir, el soporte de AppArmor está ausente. AppArmor es el sistema de control de acceso obligatorio (MAC) predeterminado de Debian y Ubuntu.
Argumento 3: Actualizar imágenes automáticamente
Seguramente esto no puede ser una característica, ¿verdad? Bueno, lo es.
Considere el segundo argumento que hice con una ligera diferencia. En este caso, suponga que los desarrolladores conocen la vulnerabilidad de seguridad. Por lo tanto, hicieron un anuncio público y ya está disponible una imagen parcheada.
¿Todo está bien? Bueno, sí y no. Docker no tiene un mecanismo de actualización automática incorporado. “Y Podman tampoco. ¿Y qué?”
Estoy de acuerdo, ni siquiera Podman tiene un mecanismo de actualización automática incorporado. ¿O sí? Depende de cómo defina “incorporado”. Dado que Podman no tiene un demonio propio, no puede realizar comprobaciones periódicas de actualizaciones.
Pero, al ser Podman un producto de Red Hat, se integra extremadamente bien con systemd.
⚠️Los argumentos que he presentado no significan que Docker sea inseguro y que todos deban usar Podman.Nada es 100% seguro. ¡Pero mis argumentos resaltan algo a tener en cuenta!
Cubro la actualización automática de contenedores de Podman en un artículo separado. Esto se hace usando systemd. Está vinculado a continuación.
3. Todo en uno vs segregado
Después de leer hasta aquí, es posible que se haya dado cuenta de que Docker tiene un enfoque “todo en uno” y que Podman es… diferente.
¿Qué significa esto para los usuarios de Docker? Para los usuarios de Docker, solo necesita el binario de Docker instalado en su sistema. losdocker
El comando se puede usar para crear imágenes, publicar imágenes (en registros comohub.docker.com) y gestionar contenedores.
Pero con la oferta de Red Hat, hay tres binarios separados. Para construir sus imágenes, utiliza elbuildah
dominio. Si desea publicar la imagen en un registro comohub.docker.comutilizar elskopeo
dominio. Y si quieres gestionar contenedores, utiliza elpodman
dominio.
Si desea una solución todo en uno como Docker o una solución segregada de Red Hat depende de sus preferencias. Ambos hacen para lo que están diseñados.
En caso de que estés buscando una manera deInstalar Podman en Ubuntuaquí hay un buen recurso.
4. Enjambre de estibadores
Docker Swarm es útil cuando desea ampliar sus contenedores utilizando varias máquinas físicas/virtuales. Puede poner varias computadoras bajo un “enjambre” y obtienen un propósito específico. Puede tener un enjambre que maneje solo las solicitudes de la base de datos mientras que un enjambre diferente sirve a un servidor web.
Si bien esta característica está notablemente ausente en Podman. Sin embargo, puede lograr lo mismo con Kubernetes. Yo diría que Kubernetes se usa más ampliamente que Docker Swarm y si se necesita escalabilidad en términos de múltiples máquinas, Kubernetes satisface mejor sus necesidades.
Conclusión
Docker es casi sinónimo de contenedores. Podman fue creado por Red Hat para ampliar su oferta de herramientas de creación de contenedores y superar algunas de las deficiencias de Docker. Ser compatible con los comandos de Docker también facilita el cambio de Docker a Podman sin tener que olvidar su conocimiento de Docker.
No es que Docker no se esté mejorando. Añadir los desarraigados es una señal en ese sentido.
En general, depende de ti lo que quieras usar. Personalmente, me ha gustado Podman. Puede adivinar eso de todos los tutoriales de Podman que he cubierto aquí.