Podman es un motor de contenedores que es compatible con la especificación OCI Containers. Podman es parte de RedHat Linux, pero también se puede instalar en otras distribuciones.
Como es compatible con OCI, Podman se puede utilizar como reemplazo directo del más conocido tiempo de ejecución de Docker. La mayoría de los comandos de Docker se pueden traducir directamente a comandos de Podman.
A continuación se muestra cómo se comparan los dos tiempos de ejecución.
¿Qué es un tiempo de ejecución?
Para mucha gente, un “contenedor” sigue siendo un “contenedor Docker”. Esta no es una representación precisa del ecosistema de contenedores actual. Docker produce imágenes de contenedores OCI, que se pueden utilizar con otros tiempos de ejecución compatibles. Kubernetes es un ejemplo, mientras que Podman es otro.
Como consecuencia, Podman y Docker tienen funciones principales superpuestas. Ambos producen imágenes que el otro puede usar para ejecutar contenedores. Luego, los dos tiempos de ejecución agregan sus propias especialidades además de las características básicas de contenedorización.
Cómo instalar Podman
Si estás usando RedHat Linux, Podman está en el
extras
repositorio. Usar
subscription-manager
para agregar el repositorio. Entonces podrás usar
yum
para instalar Podman.
su -subscription-manager repos --enable rhel-7-server-extras-beta-rpms
yum -y install podman
La mayoría de las otras distribuciones de Linux populares también incluyen Podman en sus repositorios predeterminados. Puede instalar apt podman, dnf install podman o pacman -S podman para instalarlo.
Trabajar con contenedores e imágenes
La CLI de Podman está deliberadamente alineada con la de Docker. Eso significa que puede utilizar comandos familiares de Docker para interactuar con los contenedores Podman:
podman pull my-image:latestpodman run my-image:latest --name my-container
podman ps
podman rm my-container
Podman debería resultar familiar instantáneamente para los usuarios de Docker. Podría utilizar el alias de Docker como Podman y no notar una diferencia en el uso diario. Por supuesto, no todas las funciones están disponibles; intentar usar los comandos de Docker Swarm arrojará un error, ya que Podman no tiene nada equivalente a Swarm.
¿Qué tiene de diferente Podman?
Si bien se parece a Docker, Podman tiene algunas diferencias distintivas. Lo primero y posiblemente más significativo es su arquitectura. Podman no tiene demonios: no existe un proceso de larga duración para administrar sus contenedores.
Cuando ejecuta un comando podman, interactúa directamente con el proceso que inicia sus contenedores y recupera sus imágenes. La CLI de Docker depende de una conexión al demonio de Docker. La CLI envía comandos al demonio, y luego el demonio actúa sobre ellos para crear contenedores.
El modelo de Podman ayuda a abordar algunas de las preocupaciones en torno a la seguridad de Docker. La falta de un demonio reduce considerablemente la superficie de ataque del contenedor. Si necesita acceso remoto, Podman expone una API REST que te permite interactuar con todos los tipos de recursos admitidos.
vainas
Podman viene con características únicas de las que Docker carece por completo. En Podman, los contenedores pueden formar “cápsulas” que funcionan juntas. Es similar al concepto de Kubernetes Pod.
Para crear un Pod, use el comando de creación de pod:
podman pod create --name my-pod
Los contenedores se agregan a los Pods al incluir el indicador –pod con podman run:
podman run --pod my-pod --name image-1 my-image:latestpodman run --pod my-pod --name image-2 another-image:latest
Los contenedores en el Pod se pueden administrar en conjunto por usando los comandos de podman pod:
podman kill my-pod # Kill all containerspodman restart my-pod # Restart all containers
podman stop my-pod # Stop all containers
El concepto Pod es poderoso, ya que le permite administrar múltiples contenedores en conjunto. Puede crear contenedores de aplicaciones, como un frontend, un backend y una base de datos, agregarlos a un Pod y administrarlos al unísono.
Lo más cerca que llega Docker a esto es con Compose. El uso de Compose requiere que escriba un archivo docker-compose.yml y use el binario docker-compose separado. Podman te permite crear Pods usando un comando sin salir de la terminal.
Cuando necesite exportar la definición de un Pod, Podman generará un manifiesto YAML compatible con Kubernetes. Puede tomar el manifiesto y aplicarlo directamente a un clúster de Kubernetes. Esto reduce la brecha entre ejecutar un contenedor en desarrollo y lanzarlo a la infraestructura de producción.
podman generate kube
Contenedores sin raíces
Soportes Podman contenedores desarraigados. Esto le ayuda a bloquear su seguridad al evitar que los contenedores se ejecuten como usuario raíz del host. Docker ahora es compatible modo desarraigado como opción de configuración del demonio. Podman se había desarraigado antes que Docker y pone mayor énfasis en su uso.
Primero, instale slirp4netns:
yum install slirp4netns
A continuación, configure una cantidad de espacios de nombres de red de ámbito de usuario:
echo "user.max_user_namespaces=28633" > /etc/sysctl.d/userns.confsysctl -p /etc/sysctl.d/userns.conf
Este comando permite el uso de espacios de nombres de red sin ser root.
¡Ahora está listo para ejecutar un contenedor sin raíz! Conéctese al servidor como un usuario normal. Inicie un nuevo contenedor con podman run. Se creará con el UID de su cuenta de usuario en lugar de root.
Además de los espacios de nombres totalmente desarraigados, podman tiene como alcance al usuario actual de forma predeterminada. Sus imágenes y contenedores se almacenan en la carpeta $HOME de su usuario. Cuando ejecuta podman ps o podman images, solo verá su contenido en lugar de todos los recursos del sistema.
Conclusión
Podman es un tiempo de ejecución de contenedor compatible con OCI que funciona sin un demonio. La CLI implementa todos los comandos principales de Docker. Puede realizar la transición fácilmente a Podman o utilizarlo junto con una instalación de Docker existente.
A diferencia de Docker, Podman tiene soporte de primera clase para administrar múltiples contenedores. El modelo Pod facilita el trabajo con una pila de servicios. Puede detener, reiniciar y eliminar todos los contenedores asociados mediante comandos a nivel de pod.
Podman también está listo para ayudarlo a dar el salto a los servicios de orquestación de contenedores. La capacidad de exportar YAML compatible con Kubernetes hace que Podman sea más compatible con muchos entornos de producción en contenedores. Los desarrolladores y operadores pueden utilizar la misma herramienta para gestionar sus contenedores, lo que permite una mayor colaboración y flexibilidad.