Introducción a Podman (alternativa a Docker) en Rocky Linux
Podman es una herramienta nativa de Linux para desplegar aplicaciones usando contenedores e imágenes de contenedores de la Iniciativa de Contenedores Abiertos (OCI). Soporta múltiples formatos de imágenes de contenedores, incluyendo imágenes Docker e imágenes de contenedores OCI. Además, Podman soporta la gestión de pods, grupos de contenedores.
Podman es una herramienta sin demonio, que se ejecuta como una sola línea de comandos binaria sin un servicio. Proporciona una línea de comandos similar a la de Docker, puede 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á a instalar Podman en el sistema Rocky Linux. Además, aprenderá 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 iniciar la instalación de Podman.
Instalando Podman en Rocky Linux
Por defecto, el repositorio appstream de Rocky Linux proporciona paquetes podman.
1. Ejecute el siguiente comando DNF para mostrar información sobre el paquete podman.
sudo dnf info podman
Verá una salida similar a la de abajo.
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 comando DNF que aparece a continuación.
sudo dnf install podman
Escriba ‘y’ para confirmar y pulse ‘Enter’ para continuar la instalación.
3. Si la instalación de Podman se completa, verifique utilizando el siguiente comando.
podman version
Verá una salida similar a la de abajo.
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 una configuración por defecto ubicada 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.
- registries.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 de los contenedores.
Configurar un nuevo usuario
En este paso, creará un nuevo usuario y verificará la instalación de Podman ejecutando la imagen Docker ‘hello-world’.
1. Ejecute el siguiente comando para añadir un nuevo usuario ‘johndoe’.Advertisement
useradd -m -s /bin/bash johndoe passwd johndoe
Escriba una nueva contraseña fuerte para el usuario ‘johndoe’.
2. A continuación, inicie sesión como usuario ‘johndoe’ utilizando el siguiente comando.
su - johndoe
3. Ahora ejecute el siguiente comando para ejecutar un nuevo contenedor basado en la imagen Docker ‘hello-world’.
podman run hello-world
Verás los mensajes de salida ‘Hello World’, 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. Compruebe el estado de los contenedores en su sistema utilizando el siguiente comando Podman
podman ps -a
Verá el contenedor basado en la imagen Docker ‘hello-world’ con el estado actual ‘Exited’.
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á el uso básico de Podman para gestionar contenedores e imágenes de contenedores.
Buscar imágenes de contenedores
1. Para buscar imágenes de contenedores usando Podman, usa el siguiente comando. En este ejemplo, estamos buscando imágenes de contenedores con el nombre ‘nginx’.
podman search nginx
Verás un montón de imágenes de contenedores de los múltiples registros.
2. Puede limitar los resultados de la búsqueda de cada registro de imágenes de contenedores utilizando la opción ‘–limit n’.
podman search nginx --limit 3
Ahora verá cada registro con 3 resultados de imágenes de contenedores 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 de contenedores
Podman soporta el formato de imágenes OCI y Docker. En esta etapa, gestionará imágenes de contenedores con Podman.
1. Descargue la imagen del contenedor ‘nginx:alpine’ utilizando el siguiente comando.
podman pull nginx:alpine
Selecciona el registro de contenedores que quieras utilizar y pulsa ‘Enter’ para confirmar. Para este ejemplo, utilizaremos el registro de 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
El proceso de descarga comenzará.Anuncio
? 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 la imagen del contenedor se completa, verifique las imágenes del descargador utilizando el siguiente comando.
podman images
A continuación se muestra la salida similar que obtendrá.
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 contenedor con Podman
Después de descargar la imagen del contenedor ‘nginx:alpine’, aprenderás a ejecutar un nuevo contenedor usando Podman.
1. Ejecute 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 y el número aleatorios del contenedor.
2. Verifique el contenedor que se ejecuta en su sistema utilizando el siguiente comando.
podman ps
Verá una salida similar a la siguiente.
El nombre del contenedor ‘web’ es ‘Up’ y expone el puerto ‘8080’ en la máquina anfitriona.
3. Ahora abra su navegador web y escriba la dirección IP de Rocky Linux en la barra de direcciones. Para 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 está basado en la imagen del contenedor ‘nginx:alpine’.
Compruebe los registros del contenedor con Podman
Ahora aprenderá el comando Podman para comprobar los registros de los contenedores utilizando la opción ‘logs’.
1. Para comprobar los registros del contenedor, puede utilizar el siguiente comando Podman.
podman logs web
Verás los registros detallados del contenedor ‘web’.
2. Para limitar la salida de registros de contenedores, utilice la opción ‘–tail n’.
podman logs --tail 10 web
A continuación se muestra la salida de registro similar del contenedor ‘web’.
Detención del contenedor con Podman
1. Para detener el contenedor ‘web’, utilice el siguiente comando Podman.
podman stop web
Ahora el contenedor ‘web’ será detenido.
2. Verifique utilizando el siguiente comando.
podman ps podman ps -a
Verás que el contenedor ‘web’ se borra automáticamente porque estás usando la opción ‘–rm’ cuando ejecutas el contenedor.
Configurar un volumen personalizado con Podman
En este paso, aprenderá a gestionar volúmenes con Podman.
1. Cree un nuevo directorio ‘data’ y el archivo personalizado ‘index.html’. Esto reemplazará el archivo por defecto de Nginx ‘index.html’ en el contenedor Nginx.
mkdir -p ~/data/ nano ~/data/inde.html
Copie y pegue 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>
Guarde el script y salga.
2. A continuación, ejecute 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
Utilice la opción ‘-v data:/usr/share/nginx/html’ para configurar el volumen personalizado para su nuevo contenedor. El directorio ‘data’ se montará en el directorio del contenedor ‘/usr/share/nginx/html’.
3. Compruebe la ejecución de los contenedores utilizando el comando Podman que aparece a continuación.
podman ps
El nuevo nombre del contenedor ‘web’ está ‘Up’ con el volumen personalizado.
4. Abra su navegador web y escriba la dirección IP del servidor con el puerto ‘8080’.
http://192.168.1.10:8080/
Ahora verá la página personalizada ‘index.html’ como la siguiente.
SSH al contenedor en ejecución
En este paso, accederá al shell del contenedor en ejecución.
1. Para iniciar sesión en el contenedor en ejecución, utilice Podman con la opción ‘exec’ como se indica a continuación.
podman exec -it web /bin/sh
2. Después de iniciar la sesión en el contenedor, compruebe el nombre de host del contenedor, la dirección IP y la tabla de enrutamiento.
hostname
ip a
route -n
Ahora escribe ‘exit’ y presiona ‘Enter’ para salir del contenedor.
Limpiar el entorno
En el último paso, se limpiará el entorno.
1. Detenga el contenedor ‘web’ utilizando el siguiente comando.
podman stop web
2. A continuación, elimine todos los contenedores con el estado «Exited» utilizando el siguiente comando podman.
podman rm $(podman ps --filter "status=exited" -q)
Ahora ha completado el uso básico de Podman para gestionar contenedores e imágenes de contenedores.
Conclusión
¡Enhorabuena! Ha instalado con éxito Podman en el sistema Rocky Linux. Además, ha aprendido el uso básico de Podman para gestionar contenedores e imágenes de contenedores.
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.