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 usar como un reemplazo directo para el tiempo de ejecución de Docker más conocido. 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 usar con otros tiempos de ejecución compatibles. Kubernetes es un ejemplo, mientras que Podman es otro.
Como consecuencia, Podman y Docker tienen una funcionalidad central superpuesta. 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 funciones básicas de creación de contenedores.
Cómo instalar Podman
Si está utilizando RedHat Linux, Podman está en los extras
repositorio. Usar subscription-manager
para agregar el repositorio. Entonces podrá 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 populares de Linux también incluyen Podman en sus repositorios predeterminados. Puede apt install 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 usar los comandos familiares de Docker para interactuar con los contenedores de Podman:
podman pull my-image:latest podman run my-image:latest --name my-container podman ps podman rm my-container
Podman debería ser instantáneamente familiar para los usuarios de Docker. Podría alias docker
a podman
y no notar una diferencia en el uso diario. Por supuesto, no todas las funciones están disponibles; sin embargo, intentar usar los comandos de Docker Swarm generará 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. Primero y posiblemente más significativo es su arquitectura. Podman es sin demonios —no existe un proceso de larga duración para administrar sus contenedores.
Cuando ejecutas un podman
comando, está interactuando directamente con el proceso que está iniciando sus contenedores y obteniendo sus imágenes. La CLI de Docker depende de una conexión con el demonio de Docker. La CLI envía comandos al daemon, y el daemon luego actúa sobre ellos para crear contenedores.
El modelo de Podman ayuda a abordar algunas de las preocupaciones sobre 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 le 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 pod create
comando:
podman pod create --name my-pod
Los contenedores se agregan a los pods al incluir el --pod
marcar con podman run
:
podman run --pod my-pod --name image-1 my-image:latest podman run --pod my-pod --name image-2 another-image:latest
Los contenedores en el Pod se pueden administrar en conjunto mediante el uso de podman pod
comandos:
podman kill my-pod # Kill all containers podman restart my-pod # Restart all containers podman stop my-pod # Stop all containers
El concepto de 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 Docker llega a esto es con Compose. El uso de Compose requiere que escriba un docker-compose.yml
archivo y use el docker-compose
separado binario. Podman te permite crear Pods usando un comando sin salir de la terminal.
Cuando necesite exportar la definición de un Pod, Podman producirá 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íz
Podman admite contenedores sin raíz. Esto lo ayuda a proteger su seguridad al evitar que los contenedores se ejecuten como la root
del host. usuario. Docker ahora admite el modo sin raíz como una opción de configuración del demonio. Podman había desarraigado antes de Docker y pone un mayor énfasis en su uso.
Primero, instala slirp4netns
:
yum install slirp4netns
A continuación, configure una cantidad de espacios de nombres de red con ámbito de usuario:
echo "user.max_user_namespaces=28633" > /etc/sysctl.d/userns.conf sysctl -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íces! 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 sin raíz, podman
está en el ámbito del usuario actual de forma predeterminada. Sus imágenes y contenedores se almacenan en el $HOME
de su usuario carpeta. Cuando ejecutas podman ps
o podman images
, solo verás tu contenido en lugar de cada recurso en el 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 básicos de Docker. Puede pasar fácilmente a Podman o usarlo 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 se parezca más a muchos entornos de producción en contenedores. Los desarrolladores y operadores pueden utilizar la misma herramienta para administrar sus contenedores, lo que permite una mayor colaboración y flexibilidad.