Primeros pasos con Podman (alternativa a Docker) en Rocky Linux

Podman es una herramienta nativa de Linux para desplegar aplicaciones utilizando contenedores e imágenes de contenedor de la Open Container Initiative (OCI). Es compatible con varios formatos de imágenes de contenedores, incluidas las imágenes Docker y las imágenes de contenedores OCI. Además, Podman permite gestionar pods, grupos de contenedores.

Podman es una herramienta sin demonio, que se ejecuta como un único binario de línea de comandos sin servicio. Proporciona una línea de comandos similar a Docker, puedes utilizar un alias como ‘alias docker=podman’.

Para ejecutar contenedores y gestionar imágenes de contenedores, Podman se basa en libpod y en tiempos de ejecución de contenedores OCI como runc, crun y runv.

Requisitos previos

En esta guía, aprenderás a instalar Podman en el sistema Rocky Linux. Además, aprenderás el uso básico de Podman para gestionar contenedores e imágenes de contenedores.

Antes de empezar, asegúrate de que tienes los siguientes requisitos:

  • Sistema Operativo: Rocky Linux 8.4 (Green Obsidian)
  • Privilegios de root: Para instalar nuevos paquetes y editar la configuración del sistema

Ahora vamos a empezar la instalación de Podman.

Instalación de Podman en Rocky Linux

Por defecto, el repositorio appstream de Rocky Linux proporciona paquetes podman.

1. Ejecuta el siguiente comando DNF para mostrar información sobre el paquete podman.

sudo dnf info podman

Verás una salida similar a la siguiente

Last metadata expiration check: 0:07:09 ago on Tue 16 Nov 2021 09:30:27 AM UTC.
Available Packages
Name         : podman
Version      : 3.3.1
Release      : 9.module+el8.5.0+710+4c471e88
Architecture : x86_64
Size         : 12 M
Source       : podman-3.3.1-9.module+el8.5.0+710+4c471e88.src.rpm
Repository   : appstream
Summary      : Manage Pods, Containers and Container Images
URL          : https://podman.io/
License      : ASL 2.0 and GPLv3+
Description  : podman (Pod Manager) is a fully featured container engine that is a simple
             : daemonless tool.  podman provides a Docker-CLI comparable command line that
             : eases the transition from other container engines and allows the management of
             : pods, containers and images.  Simply put: alias docker=podman.
             : Most podman commands can be run as a regular user, without requiring
             : additional privileges.
             :
             : podman uses Buildah(1) internally to create container images.
             : Both tools share image (not container) storage, hence each can use or
             : manipulate images (but not containers) created by the other.
             :
             : Manage Pods, Containers and Container Images
             : podman Simple management tool for pods, containers and images

El repositorio appstream proporciona la versión del paquete Podman‘3.3.1‘.

2. Instala Podman utilizando el siguiente comando DNF.

sudo dnf install podman

Escribe‘y’ para confirmar y pulsa‘Enter‘ para continuar la instalación.

Instalar Podman Rocky Linux

3. Si la instalación de Podman se completa, verifícala utilizando el siguiente comando.

podman version

Verás una salida similar a la siguiente.

Version:      3.3.1
API Version:  3.3.1
Go Version:   go1.16.7
Built:        Wed Nov 10 01:48:06 2021
OS/Arch:      linux/amd64

Configuración importante de Podman

El paquete Podman viene con algunas configuraciones por defecto ubicadas en el directorio ‘/etc/containers’.

A continuación se muestran algunas configuraciones de Podman que debes conocer.

  • policy.json. Configuración de la política para la firma de imágenes.
  • registros.conf. Lista de registros de imágenes de contenedores disponibles, como Docker Registry, RHEL Container image registry y Fedora Container images registry.
  • storage.conf. Configuración del almacenamiento por defecto para Podman. Incluye controladores, ubicación, etc.
  • Directorio registries.d/. Configuración de registros adicionales y firma de imágenes
  • Directorio registries .conf.d/. Configuración adicional para los alias de las imágenes contenedoras.

Diseño del directorio Podman

Configurar un nuevo usuario

En este paso, crearás un nuevo usuario y verificarás la instalación de Podman ejecutando la imagen Docker‘hello-world‘.

1. Ejecuta el siguiente comando para añadir un nuevo usuario ‘johndoe’.

useradd -m -s /bin/bash johndoe
passwd johndoe

Escribe una nueva contraseña segura para el usuario ‘johndoe‘.

2. A continuación, inicia sesión como usuario ‘johndoe’ utilizando el siguiente comando.

su - johndoe

3. Ahora ejecuta el siguiente comando para ejecutar un nuevo contenedor basado en la imagen Docker‘hola-mundo‘.

podman run hello-world

Verás los mensajes de salida ‘Hola Mundo’, lo que significa que el contenedor se está ejecutando pero ahora ha salido.

? docker.io/library/hello-world:latest
Trying to pull docker.io/library/hello-world:latest...
Getting image source signatures
Copying blob 2db29710123e done
Copying config feb5d9fea6 done
Writing manifest to image destination
Storing signatures
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

4. Comprueba el estado de los contenedores en tu sistema utilizando el siguiente comando Podman

podman ps -a

Verás el contenedor basado en la imagen Docker ‘hola-mundo’ con el estado actual ‘Salido’.

CONTAINER ID  IMAGE                                 COMMAND     CREATED        STATUS                    PORTS       NAMES
cea9bbfeac4d  docker.io/library/hello-world:latest  /hello      6 minutes ago  Exited (0) 6 minutes ago              recursing_shaw

Usos básicos de Podman

En este paso, aprenderás los usos básicos de Podman para gestionar contenedores e imágenes de contenedores.

Buscar imágenes de contenedor

1. Para buscar imágenes de contenedor usando Podman, utiliza el siguiente comando. En este ejemplo, estamos buscando imágenes contenedoras con el nombre‘nginx‘.

podman search nginx

Verás un montón de imágenes contenedoras de los múltiples registros.

2. Puedes limitar los resultados de la búsqueda de cada registro de imágenes de contenedor utilizando la opción ‘–limit n‘.

podman search nginx --limit 3

Ahora verás cada registro con 3 resultados de imágenes contenedoras con el nombre ‘nginx‘.

INDEX              NAME                                                DESCRIPTION                                      STARS       OFFICIAL    AUTOMATED
fedoraproject.org  registry.fedoraproject.org/f29/nginx                                                                 0
fedoraproject.org  registry.fedoraproject.org/f29/origin-nginx-router                                                   0
redhat.com         registry.access.redhat.com/ubi8/nginx-120           Platform for running nginx 1.20 or building ...  0
redhat.com         registry.access.redhat.com/ubi8/nginx-118           Platform for running nginx 1.18 or building ...  0
redhat.com         registry.access.redhat.com/rhscl/nginx-18-rhel7     Nginx 1.8 server and a reverse proxy server      0
centos.org         registry.centos.org/bamachrn/nginx-header                                                            0
centos.org         registry.centos.org/centos/nginx                                                                     0
centos.org         registry.centos.org/centos/nginx-110-centos7                                                         0
docker.io          docker.io/library/nginx                             Official build of Nginx.                         15839       [OK]
docker.io          docker.io/jwilder/nginx-proxy                       Automated Nginx reverse proxy for docker con...  2096                    [OK]
docker.io          docker.io/nginxinc/nginx-unprivileged               Unprivileged NGINX Dockerfiles                   54

Gestionar imágenes contenedor

Podman soporta los formatos de imágenes OCI y Docker. En esta etapa, gestionarás imágenes contenedoras con Podman.

1. Descarga la imagen de contenedor‘nginx:alpine‘ utilizando el siguiente comando.

podman pull nginx:alpine

2. Selecciona el registro de contenedores que quieras utilizar y pulsa«Intro» para confirmar. Para este ejemplo, utilizaremos el registro Docker.

? Please select an image:
    registry.fedoraproject.org/nginx:alpine
    registry.access.redhat.com/nginx:alpine
    registry.centos.org/nginx:alpine
  ? docker.io/library/nginx:alpine

Comenzará el proceso de descarga.

? docker.io/library/nginx:alpine
Trying to pull docker.io/library/nginx:alpine...
Getting image source signatures
Copying blob a4e156412037 done
Copying blob a2402c2da473 done
Copying blob e0bae2ade5ec done
Copying blob 97518928ae5f done
Copying blob 3f3577460f48 done
Copying blob e362c27513c3 done
Copying config b46db85084 done
Writing manifest to image destination
Storing signatures
b46db85084b80a87b94cc930a74105b74763d0175e14f5913ea5b07c312870f8

2. Si el proceso de descarga de imágenes contenedoras finaliza, verifica las imágenes descargadas utilizando el siguiente comando.

podman images

A continuación se muestra la salida similar que obtendrás.

REPOSITORY                     TAG         IMAGE ID      CREATED      SIZE
docker.io/library/nginx        alpine      b46db85084b8  3 days ago   24.7 MB
docker.io/library/hello-world  latest      feb5d9fea6a5  7 weeks ago  19.9 kB

Ejecutar el Contenedor con Podman

Después de descargar la imagen del contenedor ‘nginx:alpine’, aprenderás a ejecutar un nuevo contenedor utilizando Podman.

1. Ejecuta el siguiente comando para ejecutar el contenedor basado en la imagen ‘nginx:alpine‘.

podman run -it --rm -d -p 8080:80 --name web nginx:alpine

Obtendrás la cadena aleatoria y el número del contenedor.

2. Comprueba que el contenedor se ejecuta en tu sistema utilizando el siguiente comando.

podman ps

Verás una salida similar a la siguiente

podman ejecutar contenedor

El nombre del contenedor‘web‘ está‘Up‘ y expone el puerto‘8080‘ en la máquina anfitriona.

3. Ahora abre tu navegador web y escribe la dirección IP de Rocky Linux en la barra de direcciones. En este ejemplo, la máquina Rocky Linux tiene la dirección IP‘192.168.1.10‘.

http://192.168.1.10:8080/

Verás el index.html por defecto del contenedor‘web‘, que se basa en la imagen del contenedor‘nginx:alpine‘.

podman contenedor nginx

Comprueba los Registros del Contenedor con Podman

Ahora aprenderás el comando de Podman para comprobar los registros del contenedor utilizando la opción‘logs‘.

1. Para comprobar los registros del contenedor, puedes utilizar el siguiente comando de Podman.

podman logs web

Verás los registros detallados del contenedor‘web‘.

2. Para limitar la salida de los registros del contenedor, utiliza la opción ‘–tail n‘.

podman logs --tail 10 web

A continuación se muestra la salida de registro similar del contenedor ‘web‘.

podman comprueba los registros

Detener el Contenedor con Podman

1. Para detener el contenedor «web», utiliza el siguiente comando Podman.

podman stop web

Ahora se detendrá el contenedor ‘web‘.

2. Compruébalo utilizando el siguiente comando.

podman ps
podman ps -a

Verás que el contenedor ‘web’ se elimina automáticamente porque estás utilizando la opción‘–rm‘ cuando ejecutas el contenedor.

contenedor podman stop

Configurar un Volumen Personalizado con Podman

En este paso, aprenderás a gestionar volúmenes con Podman.

1. Crea un nuevo directorio ‘data’ y el archivo personalizado ‘index.html’. Esto sustituirá al archivo ‘index.html’ predeterminado de Nginx en el contenedor Nginx.

mkdir -p ~/data/
nano ~/data/inde.html

Copia y pega el siguiente script HTML.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Welcome to Container Nginx</title>
</head>
<body>
  <h2>Hello from Nginx container - Managed with Podman</h2>
</body>
</html>

Guarda el script y sal.

2. A continuación, ejecuta el siguiente comando para crear un nuevo contenedor con volumen personalizado.

podman run -it --rm -d -p 8080:80 --name web -v ~/data:/usr/share/nginx/html nginx:alpine

Utiliza la opción‘-v data:/usr/share/nginx/html‘ para configurar el volumen personalizado para tu nuevo contenedor. El directoriodatos’ se montará en el directorio del contenedor‘/usr/share/nginx/html‘.

3. Comprueba los contenedores en ejecución utilizando el siguiente comando Podman.

podman ps

El nombre del nuevo contenedor‘web‘ está‘Up’ con el volumen personalizado.

volumen personalizado podman

4. Abre tu navegador web y escribe la dirección IP del servidor con el puerto‘8080‘.

http://192.168.1.10:8080/

Ahora verás la página personalizada ‘index.html’ como se muestra a continuación.

Contenedor Ngix volumen personalizado podman

SSH al Contenedor en Ejecución

En este paso, accederás al shell del contenedor en ejecución.

1. Para acceder al contenedor en ejecución, utiliza Podman con la opción ‘exec’ como se indica a continuación.

podman exec -it web /bin/sh

2. Después de acceder al contenedor, comprueba el nombre de host del contenedor, la dirección IP y la tabla de enrutamiento.

hostname

ip a
route -n

Ahora escribe ‘exit’ y pulsa‘Enter’ para salir del contenedor.

Podman SSH al contenedor

Limpiar el entorno

En el último paso, limpiarás tu entorno.

1. Detén el contenedor‘web‘ utilizando el siguiente comando.

podman stop web

2. A continuación, elimina todos los contenedores con el estado ‘Salido‘ utilizando el siguiente comando podman.

podman rm $(podman ps --filter "status=exited" -q)

Ahora ya has completado el uso básico de Podman para gestionar contenedores e imágenes de contenedores.

Conclusión

¡Enhorabuena! Has instalado con éxito Podman en el sistema Rocky Linux. Además, has aprendido el uso básico de Podman para gestionar contenedores e imágenes contenedoras.

Para el siguiente paso, puede que te interese crear imágenes de contenedor personalizadas basadas en el formato de imagen Docker o en la especificación de imagen de contenedor OCI.

También te podría gustar...