Podman: El sustituto de Docker en RHEL 8 y Centos 8

Sí amigas y amigos, desde este año, en las últimas versiones de las distribuciones del sombrero rojo, ya no se soporta en los repositorios oficiales a Docker. La gestión de contenedores se ha sustituido por las herramientas Podman y Buildah

El principal motivo, por lo menos esto argumento la compañía, es que no requiere un proceso del sistema para funcionar. Pero no os preocupéis, vuestras imágenes de Docker son totalmente compatibles con este nuevo sistema.

De Docker ya hemos hablado varias veces en la web y en el proyecto Colaboratorio.net también os he dejado un buen puñado de entradas al respecto. Por lo que, si seguís el mundo de los contenedores, ya debéis saber que Docker tiene como pieza fundamental un proceso (daemon) que corre en el sistema. Que sea columna vertebral de la gestión de los contenedores también hace que sea su principal punto de fallo.

A partir de ahora con Buildah podemos generar nuevos contenedores y con Podman gestionarlos, además de establecer sus directivas de seguridad. De hecho, con podman tenemos comandos idénticos a los de Docker, como «pull, run, build, push, etcétera» Ídem con Buidlah, que también tiene una buena ristra de opciones. De hecho, cuando se hacen build a través de podman, realmente se utilizan las mismas funcionalidades que con Buildah.

Como diferencia es que Podman almacena las imágenes y contenedores en una ruta diferente, como es obvio.

Instalación de Podman

Su instalación es bien sencilla, utilizando los repositorios oficiales, a través de la herramienta DNF (recuerda que YUM en las últimas versiones realiza un enlace simbólico al binario de DNF), para vuestra un botón:

  1. [david@servcentosnew ~]$ which yum
  2. /usr/bin/yum
  3. [david@servcentosnew ~]$ ls -la /usr/bin/yum
  4. lrwxrwxrwx. 1 root root 5 may 13 15:34 /usr/bin/yum -> dnf-3

Pero en fin, veamos la instalación:

  1. sudo dnf install podman

En cualquier caso en la mayoría de instalaciones ya viene instalado por defecto.

Podman: Trabajando con contenedores

Al igual que cuando nos iniciamos con un lenguaje de programación empezamos con un «Hello World», aquí hacemos lo mismo:

  1. [david@servcentosnew ~]$ podman run --rm -it fedora:28 echo "Hello world!"
  2. Trying to pull docker.io/fedora:28...Getting image source signatures
  3. Copying blob 012cb44e3253: 85.35 MiB / 85.49 MiB [=============================]
  4. Copying blob 012cb44e3253: 85.49 MiB / 85.49 MiB [=========================] 16s
  5. Copying config 4c5b21baa7a0: 1.99 KiB / 1.99 KiB [==========================] 0s
  6. Writing manifest to image destination
  7. Storing signatures
  8. Hello world!

Podemos seguir creando nuevas imágenes utilizando Dockerfile como hasta ahora.

Por ejemplo:

  1. $ cat Dockerfile
  2. FROM fedora:28
  3. RUN dnf -y install cowsay
  4.  
  5. $ podman build . -t hello-world
  6. (...)
  7.  
  8. $ podman run --rm -it hello-world cowsay "Hello!"

Para construir contenedores, Podman llama a Buildah (delque hemos hablado antes) en segundo plano. Puede leer una publicación reciente sobre la creación de imágenes de contenedores con Buildah (en inglés), no solo con el típico Dockerfile.

Además de construir y ejecutar contenedores, Podman también puede interactuar con los registros de contenedores. Para iniciar sesión en un registro de contenedor, por ejemplo, el Docker Hub ampliamente utilizado, ejecutamos:

  1. $ podman login docker.io

Para realizar un «push» de la imagen que hemos de construir, solo necesitamos etiquetarla para que se refiera al registro de contenedor específico y nuestro espacio de nombres personal.

  1. $ podman -t hello-world docker.io/davidochobits/hello-world
  2. $ podman push docker.io/davidochobits/hello-world

Si has realizado pruebas en tus «laboratorios» habrás comprobado que no hace falta utilizar «root» para trabajar ni sacar partido de ningún pesado «daemon»

Y esto es todo.

Fuentes consultadas

rm-rf.es – Docker en RHEL 8 (+ CentOS 8) = buildah y podman
Fedoramagazine.org – Running Linux containers as a non-root with Podman