Podman, ¿un alias de Docker?

Daemonless container engine… Es importante que lo recordemos.

Podman se trata de un proyecto de código abierto disponible en la mayoría de las plataformas Linux. Es un motor de contenedores sin daemons para desarrollo, administración y ejecución de contenedores «Open Container Initiative» (OCI) e imágenes de contenedores.

Proporciona una línea de comandos totalmente compatible con Docker. Quiere decir que podemos crear un alias, y el modo de trabajar será como en Docker.

  • alias docker = podman
Podman
Podman

Los contenedores bajo el control de Podman pueden ser ejecutados por root o por un usuario sin privilegios.

Podman administra todo el ecosistema de contenedores, incluyendo pods, contenedores, imágenes de contenedores y volúmenes de contenedores mediante el uso de la biblioteca libpod.

Podman se especializa en todos los comandos y funciones que te ayudan a mantener y modificar las imágenes de contenedor OCI, como la extracción (pulling) y el etiquetado (tagging).

Te permite crear, ejecutar y mantener los contenedores creados a partir de esas imágenes en un entorno de producción.

A grandes rasgos, el proposito de libpod y Podman es:

  • Dar soporte a múltiples formatos de imagen, incluidos los formatos de imagen OCI y Docker.
  • Soportar múltiples medios para descarga de imágenes de forma segura, incluida la «trust & image verification».
  • Gestión de las imágenes de contenedores (capas de imágenes, sistemas de archivos superpuestos, etc.).
  • Gestión completa del ciclo de vida del contenedor.
  • Soporte para pods para gestionar grupos de contenedores.
  • Aislamiento de los recursos de contenedores y pods.

Nota: El año pasado se publicó un artículo (autor: Daniel J. Walsh) donde profundiza en la idea que Podman ejecuta contenedores de forma más segura que Docker.

"daemonless container engine" y sin necesidad de root

Una de las grandes ventajas del Podman respecto a Docker son estas dos características.

  1. No necesita un daemon ejecutándose en el sistema.
  2. No se requiere del usuario root o cualquier usuario con permisos elevados.

Si queréis ver el documento original, podéis acceder al artículo escrito por Ganesh Mani

El funcionamiento de Docker.

Docker CLI envía los comandos al Docker Daemon, donde este realiza los pull/push del registro. El daemon Docker hace todo el trabajo con los registros, imágenes, contenedores y el kernel.

Funcionamiento del Docker
Funcionamiento del Docker

 

El enfoque de Podman es interactuar directamente con el registro de imágenes, el almacenamiento de imágenes y contenedores y con el kernel de Linux a través del proceso contenedor runC (no un daemon).

Funcionamiento del Podman
Funcionamiento del Podman

 

El repositorio local de Podman está en «/var/lib/containers» en lugar de «/var/lib/docker”.

Podman usa el modelo fork/exec en lugar del cliente/servidor (Docker) para ejecutar contenedores. Y de momento, no se puede usar el docker-compose.

La compañía de Podman

Según leemos en la página oficial de Red Hat:

Algunas de las novedades que RHEL8 ofrece, son las herramientas de contenedores que permiten personalizar los sistemas para buscar, ejecutar, diseñar y
compartir contenedores con otras herramientas compatibles con los estándares de la Open Container Initiative (OCI).

Una de estas herramientas es Podman (daemonless container engine), pero a esta se le unen otras dos más:

Buildah: Una herramienta que facilita la construcción de imágenes de contenedores. Entre otras cosas:

Nota: Podman es capaz de hacer builds y el proceso es el mismo que en Docker. Puede hacer un build usando un Dockerfile,  podman build, o ejecutar un contenedor, realizar cambios en él y guardarlo todo en una nuevo tag de imagen.

Buildah puede describirse como un superconjunto de comandos relacionados con la creación y administración de imágenes de contenedor.

  • Permite crear un contenedor, ya sea desde cero o utilizando una imagen como punto de partida.
  • Crea imágenes, desde un contenedor o mediante un Dockerfile.
  • Las imágenes se pueden crear en el formato de imagen OCI o el típico formato de de imagen Docker.
  • Es capaz de montar/desmontar el root de un contenedor y trabajar con él.

Y la tercera herramienta es Skopeo

Comparte/busca imágenes de contenedor en los registros Docker, Atomic registry, registros privados, directorios locales y directorios locales OCI. Puede trabajar con imágenes OCI así como con las imágenes originales de Docker v2.

Y todo ello sin la ejecución de daemons en el sistema.

Una gran ayuda para Kubernetes

Podman (daemonless container engine) proporciona características adicionales que ayudan a los desarrolladores y operadores en entornos con Kubernetes y/o Openshift

Hay comandos adicionales proporcionados por Podman que no están disponibles en Docker.

Podman puede generar un archivo YAML de Kubernetes basado en un contenedor en ejecución usando podman genera kube. El comando «podman pod» se puede usar para depurar la ejecución de los pods de Kubernetes.

Nota: Un pod es un grupo de uno o más contenedores.

Instalando Podman

La instalación es sencilla, siempre y cuando dispongamos del repositorio:

  • subscription-manager repos –enable rhel-7-server-extras-beta-rpms

El anterior comando sólo será necesario si no se encuentra el paquete podman.

Ejecutamos la instalación:

  • yum install podman

Comprobamos la versión:

  • podman –version

podman version 1.3.2

Han sido dos pasos, no podría ser más fácil. Es hora de hacer nuestro primer pull de una imagen. Por ejemplo, vamos a trabajar con una imagen de la distribución de Linux (muy ligera, se ejecuta desde la memoria y es bastante segura) llamada Alpine

  • podman pull alpine

Trying to pull docker.io/library/alpine…Getting image source signatures
Copying blob 921b31ab772b done
Copying config 4d90542f06 done
Writing manifest to image destination
Storing signatures
4d90542f0623c71f1f9c11be3da23167174ac9d93731cf91912922e916bab02c

Comprobemos las imágenes disponibles:

  • podman images

REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/alpine latest 4d90542f0623 2 weeks ago 5.85 MB
docker.io/library/node 8 a7dabdc7cd4b 3 weeks ago 923 MB

Vamos a ejecutar la imagen del Alpine y entrar en consola de comandos:

  • podman run -it –rm docker.io/library/alpine /bin/sh

Una vez dentro de la propia imagen, podemos trabajar en ella. Por ejemplo, editemos la versión:

  • cat /etc/os-release

NAME=»Alpine Linux»
ID=alpine
VERSION_ID=3.10.0
PRETTY_NAME=»Alpine Linux v3.10″
HOME_URL=»https://alpinelinux.org/»
BUG_REPORT_URL=»https://bugs.alpinelinux.org/»

Juguemos un poco más

Como ya se ha visto, trabajar con Podman es practicamente igual que si estuviéramos con Docker.

Intentemos hacer más cosas. Vamos a probar el archiconocido programa «Hola mundo»

  • podman run hello-world

Al igual que Docker, si no tenemos la imagen descargada, hará un pull y a continuación lo ejecutará.

Trying to pull docker.io/library/hello-world…Getting image source signatures
Copying blob 1b930d010525 done
Copying config fce289e99e done
Writing manifest to image destination
Storing signatures

Hello from Docker!

Aquí tenemos el saludo…

 

Mediante el comando.

  • podman ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68574470d7d2 docker.io/library/hello-world:latest /hello 5 seconds ago Exited (0) 5 seconds ago focused_villani

Obtendremos un registro de sus ejecuciones .

 

Por último, vamos a crear nuestra propia imagen. Para ello necesitamos editar un Dockerfile e introduciremos lo siguiente:

FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay

A continuación, el build:

  • podman build -t docker-whale .

Si todo ha ido bien, entre las imágenes que tengamos, podremos ver:

docker.io/docker/whalesay latest6b362a9f73eb 4 years ago 258 MB

Sólo resta ejecutar la nueva imagen:

  • podman run -it docker-whale

Para los que no lo conozcan, la imagen docker/whalesay es una distribución de Ubuntu con una compilación personalizada del programa cowsay que muestra a la ballena Docker en lugar de la vaca habitual.

Deja un comentario

Cerrar menú