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.
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.
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
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‘.
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‘.
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.
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 directorio‘datos’ 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.
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.
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.
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.