Guía para principiantes para instalar y utilizar Podman en AlmaLinux 9
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 y grupos de contenedores.
Podman es una herramienta sin demonio, que se ejecuta como una única línea de comandos binaria sin servicio. Proporciona una línea de comandos similar a Docker, puedes utilizar un alias como ‘alias docker=podman’.
En esta guía, te mostraremos cómo instalar y utilizar Podman como sustituto de Docker Engine en un servidor AlmaLinux 9. Aprenderás algunos usos básicos de Podman para gestionar aplicaciones en contenedores. Al completar esta guía, tendrás una mejor comprensión del uso de Podman como orquestación de contenedores para tu desarrollo local.
Requisitos previos
Para comenzar con esta guía, debes tener lo siguiente:
- Un servidor AlmaLinux 9 – Este ejemplo utiliza un servidor con el nombre de host‘AlmaLinux9‘.
- Un usuario no root con privilegios de administrador sudo/root.
Instalación de Podman
Podman es un demonio menos y de código abierto de orquestación de contenedores para el desarrollo rápido. Podman es una aplicación nativa de Linux y proporciona una interfaz de línea de comandos similar a Docker.
Con Podman, puedes encontrar, ejecutar, compartir y desplegar aplicaciones utilizando contenedores OCI (Open Containers Initiative) e imágenes de contenedores.
En AlmaLinux, Podman está disponible por defecto en el repositorio AppStream, puedes instalarlo utilizando el gestor de paquetes DNF.
Ejecuta el siguiente comando dnf para instalar Podman en tu servidor AlmaLinux.
sudo dnf install podman
Introduce y cuando se te solicite, y pulsa ENTER.
Como Podman no tiene demonio, puedes ejecutarlo sin iniciar ningún demonio.
Ejecuta el siguiente comando para comprobar la versión de Podman e información detallada sobre tu instalación.
podman version
A continuación se muestra una salida de la versión actual de Podman durante este escrito:
Además, también puedes verificar los detalles de la instalación de Podman utilizando el siguiente comando.
podman info
Ejecutar Podman como usuario no root
En esta sección, configurarás Podman para un usuario no root. Crearás un nuevo usuario y te asegurarás de que el nuevo usuario no root pueda ejecutar y ejecutar contenedores con Podman.
Ejecuta el siguiente comando para crear un nuevo usuario llamado«alice» y configura su contraseña. Introduce una nueva contraseña cuando se te pida y repite la operación.
sudo useradd -m -s /bin/bash alice sudo passwd alice
Ahora, añade el nuevo usuario‘alice‘ al grupo‘wheel‘. Esto permitirá al nuevo usuario ejecutar‘sudo‘ y convertirse en root.
sudo usermod -aG wheel alice
A continuación, ejecuta el siguiente comando para habilitar lingering para el usuario «alice». Esto permite al usuario ‘alice’ ejecutar el proceso contenedor durante un largo periodo de tiempo, incluso cuando el usuario cierre la sesión, el proceso seguirá ejecutándose.
sudo loginctl enable-linger alice
A continuación, inicia sesión como el nuevo usuario ‘alice‘ utilizando el comando que aparece a continuación.
su - alice
Ejecuta el siguiente comando‘podman‘ para ejecutar un nuevo contenedor con la imagen‘hello-world‘.
podman run hello-world
Si tiene éxito, deberías obtener una salida como ésta:
Por último, ejecuta el siguiente comando ‘podman’ para verificar la lista de contenedores en ejecución y salidos.
podman ps -a
Si la configuración es correcta, deberías ver el contenedor con la imagen base ‘hello-world‘ con el estado‘Exited‘.
Encontrar imágenes de contenedor
Por defecto, Podman recuperará imágenes de contenedores de varios registros de imágenes, como el registro de imágenes de Redhat, quay.io y también DockerHub. Puedes añadir más registros de imágenes de contenedores a la configuración ‘/etc/containers/registries.conf’.
Este ejemplo utilizará DockerHub como registro de contenedores, así que empecemos.
Ejecuta el siguiente comando para buscar nuevas imágenes de contenedor que contengan‘httpd‘.
podman search httpd
A continuación se muestra la salida que deberías recibir en tu terminal:
También puedes limitar la salida utilizando la opción‘–limit‘ de esta forma.
podman search httpd --limit 3
Esto mostrará sólo las tres primeras imágenes contenedor de cada registro de imágenes contenedor.
Por último, también puedes utilizar la opción«–filtro» como ésta.
podman search httpd --filter=is-official
Esto te mostrará sólo las imágenes contenedor oficiales.
Descarga de imágenes
Después de encontrar las imágenes de contenedor, el siguiente paso es descargar las imágenes de contenedor de los registros.
Ejecuta el siguiente comando para descargar la imagen‘httpd‘ con la etiqueta‘alpine‘.
podman pull httpd:alpine
Selecciona el registro de imágenes que quieras utilizar. En este ejemplo utilizaremos DockerHub.
Una vez seleccionada la fuente, comenzará el proceso de descarga.
Una vez finalizado, ejecuta el siguiente comando para comprobar las imágenes disponibles en tu servidor AlmaLinux.
podman images
En este punto, si tiene éxito, deberías obtener dos imágenes contenedoras, la imagen‘hello-world‘ de quay.io y‘httpd‘ del DockerHub.
Inspeccionar imágenes
Inspeccionar imágenes es una potente forma de obtener información detallada sobre cómo se iniciará el contenedor. En Podman y Docker, puedes inspeccionar imágenes con la opción ‘inspeccionar’.
Ejecuta el siguiente comando para obtener información detallada sobre la imagen‘httpd:alpine‘.
podman inspect docker.io/library/httpd:alpine
Esto te mostrará información detallada sobre las imágenes, como la fecha de creación, el tamaño, el directorio de trabajo por defecto, el comando de inicio, el puerto expuesto y mucho más.
También puedes especificar qué parte quieres comprobar utilizando el parámetro adicional así.
podman inspect --format "size: {{.Size}}" docker.io/library/httpd:alpine podman inspect --format "ports: {{.Config.ExposedPorts}}" docker.io/library/httpd:alpine podman inspect --format "workdir: {{.Config.WorkingDir}}" docker.io/library/httpd:alpine
Esto te mostrará el tamaño de la imagen, el puerto expuesto por defecto y el directorio de trabajo por defecto.
Ejecutar el Contenedor
En esta sección, aprenderás a ejecutar el contenedor con Podman.
Introduce el siguiente comando para ejecutar un nuevo contenedor llamado ‘httpd’, exponer el puerto 8080 en la máquina anfitriona y utilizar la imagen‘httpd:alpine‘. Además, el parámetro‘–rm‘, eliminará automáticamente el contenedor al detenerlo.
podman run -it --rm -d -p 8080:80 --name httpd docker.io/library/httpd:alpine
Si tiene éxito, deberías obtener la cadena aleatoria y el número del nuevo id del contenedor.
Comprueba el contenedor en ejecución utilizando el siguiente comando. Deberías obtener el contenedor ‘httpd‘ con el estado‘Up‘ y utilizar el puerto 8080 en la máquina anfitriona.
podman ps
A continuación, puedes comprobar el contenedor ‘httpd’ utilizando el siguiente comando curl. Asegúrate de sustituir la dirección IP del ejemplo siguiente por la dirección IP de tu servidor.
curl http://192.168.5.20:8080/
Si tienes éxito, deberías obtener una salida como ésta:
Además, también puedes acceder al contenedor ‘httpd’ a través del navegador web. Abre tu navegador web y visita las direcciones IP del servidor seguidas del puerto 8080 del contenedor (es decir: http://192.168.5.20:8080/).
Si tienes éxito, deberías obtener la página predeterminada index.html del contenedor ‘httpd‘ de esta forma:
Comprobando los Registros del Contenedor
Con el contenedor ‘httpd’ en funcionamiento, ahora vas a comprobar los logs del contenedor. Saber esto es útil para depurar tus aplicaciones.
Para mostrar todos los registros del contenedor ‘httpd‘, ejecuta el siguiente comando.
podman logs httpd
Este es un ejemplo de los registros del contenedor ‘httpd’.
A continuación, puedes reducir la salida de registros utilizando el parámetro ‘–tail ‘ de la siguiente manera.
podman logs --tail 20 httpd
En este ejemplo, el parámetro ‘ tail 20‘ te mostrará las últimas 20 líneas de registros del contenedor ‘httpd‘.
Detener el Contenedor
Ahora, si quieres parar el contenedor, simplemente ejecuta el comando `podmanstop`.
Ejecuta el siguiente comando para detener el contenedor ‘httpd‘.
podman stop httpd
Una vez detenido el contenedor ‘httpd‘, ejecuta el siguiente comando para comprobar la lista de contenedores disponibles en tu sistema.
podman ps podman ps -a
El contenedor ‘httpd‘ se elimina automáticamente después de detenerlo. Esto se debe a que ejecutas el contenedor con el parámetro‘–rm’.
Ejecutar un contenedor con un volumen personalizado
En este ejemplo, ejecutarás un nuevo contenedor con volumen personalizado. Esto montará el directorio local de la máquina anfitriona en el contenedor.
Crea un nuevo directorio ‘data‘ dentro del directorio personal del usuario alice. A continuación, crea un nuevo archivo‘index.html dentro del directorio‘data’ utilizando el editor nano.
mkdir -p ~/data/ nano ~/data/index.html
Inserta 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 httpd container - Managed with Podman</h2> </body> </html>
Guarda y cierra el archivo.
Ahora, ejecuta el siguiente comando para ejecutar un nuevo contenedor ‘httpd’ con el volumen personalizado del directorio‘data’, que se montará en el directorio‘/usr/local/apache2/htdocs‘ del contenedor.
podman run --privileged=true -it --rm -d -p 8080:80 --name httpd -v ~/data:/usr/local/apache2/htdocs docker.io/library/httpd:alpine
Además, este contenedor se ejecuta con un parámetro adicional‘–privileged=true‘. Esto es para hacer pruebas, y aún así el contenedor se ejecutará como usuario‘alice‘ y no como usuario root. Obtén más información sobre banderas privilegiadas en Podman.
A continuación, ejecuta el siguiente comando para comprobar el contenedor en ejecución en tu sistema.
podman ps
Si se ejecuta correctamente, deberías ver el nuevo contenedor‘httpd‘ con el estado‘Up‘ y el puerto 8080 expuesto en la máquina anfitriona.
Ejecuta el siguiente comando curl para verificar el nuevo contenedor ‘httpd‘.
curl http://192.168.5.21:8080/
Deberías obtener una salida del script index.html que creaste anteriormente.
Desde el navegador web en http://192.168.5.21:8080/, se te debería mostrar la página personalizada como ésta:
Iniciar sesión en el contenedor
Con el contenedor ‘httpd‘ en ejecución, puedes acceder al contenedor mediante shell utilizando el comando‘podman exec‘.
Accede al contenedor ‘httpd‘ utilizando el siguiente comando. Esto ejecutará el shell‘/bin/sh‘ en el contenedor ‘httpd‘ y lo adjuntará a tu sesión actual.
podman exec -it httpd /bin/sh
Una vez conectado, deberías estar en el directorio ‘WorkingDir‘. En su ejemplo, el WorkingDir por defecto es el directorio ‘/usr/local/apache2‘.
Ahora ejecuta el siguiente comando en el contenedor‘httpd‘. Comprueba el usuario actual, la dirección IP local del contenedor y la puerta de enlace por defecto del contenedor.
id
ip a
route -n
Puede que tengas una salida con una dirección IP y una puerta de enlace diferentes, pero debería ser similar a ésta:
Ejecutar y Gestionar Pod
En Podman, puedes crear y ejecutar Pod. Pod es una envoltura para contenedores, lo que significa que varios contenedores pueden ejecutarse en un único Pod. Como en Kubernetes, Pod es la entidad más pequeña donde se ejecuta tu aplicación.
Con Podman, puedes crear y ejecutar Pod, incluso sin Kubernetes.
Ejecuta el siguiente comando para crear un nuevo pod httpdTest con la imagen‘httpd:alpine‘ y exponer el puerto 9090 en la máquina anfitriona.
podman run -dt --pod new:httpdTest -p 9090:80 docker.io/library/httpd:alpine
Si tiene éxito, deberías obtener la cadena aleatoria y el número de Pod id.
Ahora ejecuta el siguiente comando para comprobar el Pod en ejecución en tu sistema.
podman pod ls
Deberías ver el Pod‘httpdTest‘ con el estado‘En ejecución‘ y 2 contenedores.
Ahora puedes utilizar la opción‘inspeccionar‘ en el pod así.
podman pod inspect httpdTest
Deberías obtener información detallada sobre el pod httpdTest.
También puedes comprobar el número de contenedores que se ejecutan dentro de los pods, incluidos los nombres de los contenedores, utilizando el siguiente comando.
podman pod inspect --format="containers: {{.NumContainers}}" httpdTest podman pod inspect --format "{{.Containers}}" httpdTest
Obtendrás una salida como ésta:
Por último, ejecuta el siguiente comando para acceder al pod httpdTest, que se ejecuta en el puerto 9090 de la máquina anfitriona. Si tienes éxito, deberías obtener los contenedores de la página index.html por defecto que se ejecutan en el pod httpdTest.
curl http://192.168.5.21:9090/
Conclusión
¡Enhorabuena! Ya has instalado Podman en AlmaLinux 9. También has aprendido el uso básico de Podman para gestionar imágenes y contenedores. Además, también has aprendido a crear y ejecutar Pod con Podman.